Setting an activity availability condition in code

Setting an activity availability condition in code

Tim Hunt -
Колькасьць адказаў: 3
Выява Core developers Выява Documentation writers Выява Particularly helpful Moodlers Выява Peer reviewers Выява Plugin developers

I just had to learn this by asking sam. Since not everyone is lucky enough to share an office with sam, I thought I would put it here:

If you want to programmatically set up an availability condition (e.g. set an activity to only be available to users of a particular group, the best code to do that is:

$restriction = \core_availability\tree::get_root_json(
[\availability_group\condition::get_json($group->id)]);
$DB->set_field('course_modules', 'availability',
json_encode($restriction), ['id' => $cmid]);
rebuild_course_cache($course->id, true);
I also added this to https://docs.moodle.org/dev/Availability_API. I hope that helps somebody.
Сярэдняе рэйтынгаў:Useful (4)
У адказ на Tim Hunt

Re: Setting an activity availability condition in code

Mihir J -

Hi Tim

This is great!

I have one query - the above code part is actually removes all existing condition and add only the group one.

Rather than replacing, how can I add a new restriction along with existing one.

Say, i already have a date condition for a cm, now programming i want to add an AND condition of group along with that.

How do i do this?

Thanks again!

Mihir

У адказ на Mihir J

Re: Setting an activity availability condition in code

Tim Hunt -
Выява Core developers Выява Documentation writers Выява Particularly helpful Moodlers Выява Peer reviewers Выява Plugin developers
I don't know. Have a look at the other methods on the \core_availability\tree class. I guess you need to start with the current value of the setting, and parse it into a tree structure, then modify the structure to add the new rules, then save it again.