В общем, как мне видится схема должна быть примерно такой.
Нужно разработать плагин условия доступа по оценке из другого курса, основываясь на плагине оценки из текущего курса.
Также нужно разработать плагин условного доступа по завершению другого курса, основываясь на плагине https://moodle.org/plugins/availability_coursecompleted
Плагины эти непростые. Мало сделать php-часть, так там нужно ещё кучу javascript-а написать, на непонятном этом YUI.
После этого можно делать плагин записи на курс по условию, используя систему условий. Мне сейчас даже кажется, что enrol-плагин в этом всём - самое простое, но без одного из первых двух плагинов браться за это дело нет смысла.
В целом, такая схема реализуема в разумные сроки и позволила бы решить немало задач. Но объём работ слишком большой, чтобы браться за него без финансовой поддержки заинтересованных организаций. К несчастью, среди организаций, с которыми я работаю, потребности в таком функционале сейчас нет.
А пока - вот вам промежуточное решение без каких-либо дополнительных плагинов. Пусть нужно доступ к курсу Б разрешить только после курса А. Делаете для курса Б самозапись без ограничений. Добавляете в 0 секцию курса Б скрытый Субкурс со ссылкой на Курс А. Последняя версия модуля Субкурс позволяет забирать из исходного курса не только оценку, но и состояние завершения курса. На каждую из секций курса Б настраиваете условный доступ либо по завершению Субкурса из секции 0, либо по определенной оценке. В результате получается, что зайти в курс может любой, но вот увидеть в нём что-либо сможет только по завершению предыдущего курса.
Можно к этому ещё попробовать добавить формат курса https://moodle.org/plugins/format_flexsections, создать одну главную секцию, навешать на неё условие, чтобы не делать это много раз, а уже внутрь поместить остальные защищаемые секции. Не уверен, что сработает, но попробовать стоит.