Setting an activity availability condition in code

Setting an activity availability condition in code

door Tim Hunt -
Aantal antwoorden: 3
Foto van Core developers Foto van Documentation writers Foto van Particularly helpful Moodlers Foto van Peer reviewers Foto van 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.
Gemiddelde van de beoordelingen: Useful (4)
Als antwoord op Tim Hunt

Re: Setting an activity availability condition in code

door 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

Gemiddelde van de beoordelingen:  -
Als antwoord op Mihir J

Re: Setting an activity availability condition in code

door Tim Hunt -
Foto van Core developers Foto van Documentation writers Foto van Particularly helpful Moodlers Foto van Peer reviewers Foto van 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.
Gemiddelde van de beoordelingen:  -
Als antwoord op Tim Hunt

Re: Setting an activity availability condition in code

door Mihir J -
Hi Tim,

Thank you, yes, we can do that using tree class and parsing. Then by json encode, save it back only that particular new children

Thanks again!
Mihir
Gemiddelde van de beoordelingen:  -