Сергей, у меня есть альтернативное предложение. Когорты - это системная функция, профиль пользователя - тоже. Почему бы не добавить такую функциональность в ядро?
Нам нужна будет функция которая будет выводить все когорты пользователя с учетом их видимости. Я Вам могу помочь ее написать. После этого останется только добавить поле на страницу профиля и добавить пункт в administration setting $CFG->hiddenuserfields чтобы можно было это скрыть.
"Видимость" когорт это очень важно. В России когорты используются как потоки студентов, практически во всех остальных странах такое понятие отсутствует и студенты сами себе выбирают курсы. Поэтому когорты могут использоваться для, например, таких понятий как "сексуальные меньшинства", "disabled students", "students at risk", и так далее. То есть можете себе представить, что администрации не очень хочется чтобы это было видно всем. Поэтому есть разные разрешения контролирующие доступ к видимости когорт. Их надо обязательно учитывать. Посмотрите например на функции cohort_get_cohorts() и cohort_get_all_cohorts(). Ваша функция profile_field_get_cohort() не учитывает этого всего. Кстати, в запросах не пишите название таблицы с префиксом , как например mdl_cohort, надо писать {cohort}, префикс может быть разный у разных пользователей
Мне очень нравится Ваша идея добавить список когорт в профиль, казалось бы очевидная вещь, но почему-то issue на эту тему еще не существует.