Я программирую новый блок с именем «custom_block» и хочу добавить «custom_capability» в «custom_role». Я попытался добавить его вручную с помощью инструментов веб-администрирования, и он работает нормально.
Теперь я хочу добавить его программно во все мои экземпляры Moodle, поэтому внутри моего blocks/custom_block/db/access.php
выглядит примерно так:
'block/custom_block:custom_capability' => array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'custom_role' => CAP_ALLOW
),
),
, который выдает ошибку error/moodle/invalidlegacy
, потому что 'custom_role' не является архетипом (даже если они имеют общее имя с основными ролями Moodle), но нет альтернативного поля "роль", чтобы определить это.
Так как мне этого добиться?
Ограничения:
- Custom_role уже существует во всех экземплярах Moodle.
- Custom_role не наследует и не может наследовать от архетипа. "Примените возможность к архетипу и сделайте так, чтобы" custom_role "наследовал от архетипа" работает, но не приемлемо, потому что эта возможность будет побочно применяться к другим ролям, унаследованным от него.
- Должно быть сделано программно, вспомните сотни экземпляров Moodle.
- Это не нужно делать через access.php, но оно должно повторяться и обновляться.
- Должен "хорошо играть" с Moodle. Нет хакерского SQL, модифицирующего вручную [mdl_role_capabilities] (я уже знаю хакерский SQL), но ответ «нет другого пути, кроме хакерского SQL», будет принят, без какого-либо другого.
- Идеальная совместимость с Moodle 2.8 была бы идеальной, но в противном случае было бы также принято решение для другой (более новой) версии.