了解 Moodle $context

Understanding Moodle $context

来自 Moodle doc

A context is a space in Moodle where roles can be assigned.

我理解上下文是逻辑的space,用于管理 Moodle 对象。

我开发了一个带有文件上传的自定义块插件,我使用 file_prepare_draft_areafile_save_draft_area_files functions.There 是一个必须传递的 $context 参数,我不真的不知道我应该传递什么上下文? 我想这意味着我应该将块插件上传的文件放在哪个逻辑 space 中? 在我看来,最合乎逻辑的是将上传的文件存储在与我的块插件相关的上下文中。

我尝试使用 context_block::instance($instanceid) 但我不知道如何获取 $instanceid 参数。

上下文类型如下:

  • 系统
  • 课程类别
  • 课程
  • Activity模块
  • 阻止
  • 用户

上下文的层次结构是: 系统=>课程类别=>课程=>Activity模块

块上下文可以出现在课程内或 'site' 课程内。 用户上下文在课程之外。

如果您希望文件绑定到块的特定实例(例如,当块被删除时它们会自动删除,并且您可以将来自块的不同实例的文件分开),那么您应该使用块上下文(但您必须将块的 instanceid 传递给子页面才能使用它来获取上下文:

$context = context_block::instance($blockinstanceid);

如果您想要将文件绑定到课程 - 因此课程中块的所有实例共享同一个文件 space 并且仅在删除整个课程时删除文件,然后使用课程上下文(将 courseid 作为参数传递到子页面,然后使用:

$context = context_course::instance($courseid);

但是,如果您想在站点上的所有块之间共享该文件区域,那么系统上下文就是您想要的:

$context = context_system();

还有一张(旧的?)documentation供参考——看par。 “13.2. Moodle 的角色和权限系统”。

(我也找到了 Russian translation of that paragraph,也许对某些人有用。)