in local/o365/classes/page/acp.php [555:771]
public function mode_usergroupcustom() {
global $CFG, $OUTPUT, $PAGE;
$PAGE->navbar->add(get_string('acp_usergroupcustom', 'local_o365'),
new \moodle_url($this->url, ['mode' => 'usergroupcustom']));
$totalcount = 0;
$perpage = 20;
$curpage = optional_param('page', 0, PARAM_INT);
$sort = optional_param('sort', '', PARAM_ALPHA);
$search = optional_param('search', '', PARAM_TEXT);
$sortdir = strtolower(optional_param('sortdir', 'asc', PARAM_ALPHA));
$headers = [
'fullname' => get_string('fullnamecourse'),
'shortname' => get_string('shortnamecourse'),
];
if (empty($sort) || !isset($headers[$sort])) {
$sort = 'fullname';
}
if (!in_array($sortdir, ['asc', 'desc'], true)) {
$sortdir = 'asc';
}
$table = new \html_table();
foreach ($headers as $hkey => $desc) {
$diffsortdir = ($sort === $hkey && $sortdir === 'asc') ? 'desc' : 'asc';
$linkattrs = ['mode' => 'usergroupcustom', 'sort' => $hkey, 'sortdir' => $diffsortdir];
$link = new \moodle_url('/local/o365/acp.php', $linkattrs);
if ($sort === $hkey) {
$desc .= ' '.$OUTPUT->pix_icon('t/'.'sort_'.$sortdir, 'sort');
}
$table->head[] = \html_writer::link($link, $desc);
}
$table->head[] = get_string('acp_usergroupcustom_enabled', 'local_o365');
$table->head[] = get_string('groups_team', 'local_o365');
$limitfrom = $curpage * $perpage;
$coursesid = [];
if (empty($search)) {
$sortdir = 1;
if ($sortdir == 'desc') {
$sortdir = -1;
}
$options = [
'recursive' => true,
'sort' => [$sort => $sortdir],
'offset' => $limitfrom,
'limit' => $perpage,
];
$topcat = \core_course_category::get(0);
$courses = $topcat->get_courses($options);
$totalcount = $topcat->get_courses_count($options);
} else {
$searchar = explode(' ', $search);
$courses = get_courses_search($searchar, 'c.'.$sort.' '.$sortdir, $curpage, $perpage, $totalcount);
}
foreach ($courses as $course) {
if ($course->id == SITEID) {
continue;
}
$coursesid[] = $course->id;
$isenabled = \local_o365\feature\usergroups\utils::course_is_group_enabled($course->id);
$enabledname = 'course_'.$course->id.'_enabled';
$teamenabled = \local_o365\feature\usergroups\utils::course_is_group_feature_enabled($course->id, 'team');
$teamname = 'course_team_' . $course->id . '_enabled';
$enablecheckboxattrs = [
'onchange' => 'local_o365_set_usergroup(\''.$course->id.'\', $(this).prop(\'checked\'), $(this))'
];
$teamcheckboxattrs = [
'class' => 'feature feature_teams',
];
if ($isenabled !== true) {
$teamcheckboxattrs['disabled'] = '';
}
$courseurl = new \moodle_url('/course/view.php', ['id' => $course->id]);
$rowdata = [
\html_writer::link($courseurl, $course->fullname),
$course->shortname,
\html_writer::checkbox($enabledname, 1, $isenabled, '', $enablecheckboxattrs),
\html_writer::checkbox($teamname, 1, $teamenabled, '', $teamcheckboxattrs),
];
$table->data[] = $rowdata;
}
$PAGE->requires->jquery();
$this->standard_header();
$endpoint = new \moodle_url('/local/o365/acp.php', ['mode' => 'usergroupcustom_change', 'sesskey' => sesskey()]);
$bulkendpoint = new \moodle_url('/local/o365/acp.php', ['mode' => 'usergroupcustom_bulkchange', 'sesskey' => sesskey()]);
$custompageurl = new \moodle_url('/local/o365/acp.php', ['mode' => 'usergroupcustom']);
$allchangeendpoint = new \moodle_url('/local/o365/acp.php',
['mode' => 'usergroupcustom_allchange', 'sesskey' => sesskey()]);
$js = 'var local_o365_set_usergroup = function(courseid, state, checkbox) { ';
$js .= 'data = {courseid: courseid, state: state}; ';
$js .= 'var newfeaturedisabled = (state == 0) ? true : false; ';
$js .= 'var newfeaturechecked = (state == 1) ? true : false; ';
$js .= 'var featurecheckboxes = checkbox.parents("tr").find("input.feature"); ';
$js .= 'featurecheckboxes.prop("disabled", newfeaturedisabled); ';
$js .= 'featurecheckboxes.prop("checked", newfeaturechecked); ';
$js .= '}; ';
$js .= 'var local_o365_usergroup_bulk_set_feature = function(feature, state) { ';
$js .= 'var enabled = (state == 1) ? true : false; ';
$js .= 'console.log("local_o365_usergroup_bulk_set_feature " + state + " " + enabled); ';
$js .= '$("input.feature_"+feature+":not(:disabled)").prop("checked", enabled); ';
$js .= '}; ';
$js .= 'var local_o365_usergroup_coursesid = '.json_encode($coursesid).'; ';
$js .= 'var local_o365_usergroup_features = ["team"]; ';
$js .= 'var local_o365_usergroup_all_set_feature = function(state) {';
$js .= 'var enabled = (state == 1) ? true : false; ';
$js .= ' // Send data to server. ' . "\n";
$js .= '$.ajax({
url: \'' . $allchangeendpoint->out(false) . '\',
data: {state: enabled},
type: "POST",
success: function(data) {
console.log(data);
window.location.href = "' . $custompageurl->out(false) . '";
}
});' . "\n";
$js .= '}; ' . "\n";
$js .= 'var local_o365_usergroup_save = function() { '."\n";
$js .= 'var coursedata = {}; '."\n";
$js .= 'for (var i = 0; i < local_o365_usergroup_coursesid.length; i++) {'."\n";
$js .= 'var courseid = local_o365_usergroup_coursesid[i]; '."\n";
$js .= 'var enabled = $("input[name=\'course_"+courseid+"_enabled\']").is(\':checked\'); '."\n";
$js .= 'var features = {enabled: enabled}; '."\n";
$js .= 'for (var j = 0; j < local_o365_usergroup_features.length; j++) {'."\n";
$js .= ' var feature = local_o365_usergroup_features[j]; '."\n";
$js .= ' if (enabled) { '."\n";
$js .= ' features[feature] = $("input[name=\'course_"+feature+"_"+courseid+"_enabled\']").is(\':checked\'); '."\n";
$js .= ' console.log("local_o365_usergroup_save " + feature + " " + features[feature]); '."\n";
$js .= ' } else { // If enabled.'."\n";
$js .= ' features[feature] = false; ';
$js .= ' }; '."\n";
$js .= '}; '."\n";
$js .= 'coursedata[courseid] = features; '."\n";
$js .= '}; '."\n";
$js .= ' // Send data to server. '."\n";
$js .= '$.ajax({
url: \''.$endpoint->out(false).'\',
data: {
coursedata: JSON.stringify(coursedata),
newcourse: $("input#id_s_local_o365_sync_new_course").prop("checked"),
},
type: "POST",
success: function(data) {
console.log(data);
$(\'#acp_usergroupcustom_savemessage\').show();
setTimeout(function () { $(\'#acp_usergroupcustom_savemessage\').hide(); }, 5000);
}
}); '."\n";
$js .= '}; '."\n";
echo \html_writer::script($js);
echo \html_writer::tag('h2', get_string('acp_usergroupcustom', 'local_o365'));
// Option to enable all sync features on all pages.
echo \html_writer::tag('button', get_string('acp_usrgroupcustom_enable_all', 'local_o365'),
['onclick' => 'local_o365_usergroup_all_set_feature(1)']);
// Option to enable sync by default for new courses.
require_once($CFG->libdir . '/adminlib.php');
$enablefornewcourse = new \admin_setting_configcheckbox('local_o365/sync_new_course',
get_string('acp_usergroupcustom_new_course', 'local_o365'),
get_string('acp_usergroupcustom_new_course_desc', 'local_o365'), '0');
echo $enablefornewcourse->output_html(get_config('local_o365', 'sync_new_course'));
// Bulk Operations.
$strbulkenable = get_string('acp_usergroupcustom_bulk_enable', 'local_o365');
$strbulkdisable = get_string('acp_usergroupcustom_bulk_disable', 'local_o365');
echo \html_writer::tag('h5', get_string('acp_usergroupcustom_bulk', 'local_o365'));
echo \html_writer::tag('h6', get_string('acp_usergroupcustom_bulk_help', 'local_o365'));
echo \html_writer::start_tag('div', ['style' => 'display: inline-block;margin: 0 1rem']);
echo \html_writer::tag('span', get_string('groups_team', 'local_o365').': ');
echo \html_writer::tag('button', $strbulkenable, ['onclick' => 'local_o365_usergroup_bulk_set_feature(\'teams\', 1)']);
echo \html_writer::tag('button', $strbulkdisable, ['onclick' => 'local_o365_usergroup_bulk_set_feature(\'teams\', 0)']);
echo \html_writer::end_tag('div');
// Search form.
echo \html_writer::tag('h5', get_string('search'));
echo \html_writer::start_tag('form', ['id' => 'coursesearchform', 'method' => 'get']);
echo \html_writer::start_tag('fieldset', ['class' => 'coursesearchbox invisiblefieldset']);
echo \html_writer::empty_tag('input', ['type' => 'hidden', 'name' => 'mode', 'value' => 'usergroupcustom']);
echo \html_writer::empty_tag('input', ['type' => 'text', 'id' => 'coursesearchbox', 'size' => 30, 'name' => 'search',
'value' => s($search)]);
echo \html_writer::empty_tag('input', ['type' => 'submit', 'value' => get_string('go')]);
echo \html_writer::div(\html_writer::tag('strong', get_string('acp_usergroupcustom_searchwarning', 'local_o365')));
echo \html_writer::end_tag('fieldset');
echo \html_writer::end_tag('form');
echo \html_writer::empty_tag('br');
echo \html_writer::tag('h5', get_string('courses'));
echo \html_writer::table($table);
echo \html_writer::tag('p', get_string('acp_usergroupcustom_savemessage', 'local_o365'),
['id' => 'acp_usergroupcustom_savemessage', 'style' => 'display: none; font-weight: bold; color: red']);
echo \html_writer::tag('button', get_string('savechanges'),
['class' => 'buttonsbar', 'onclick' => 'local_o365_usergroup_save()']);
$searchtext = optional_param('search', '', PARAM_TEXT);
$cururl = new \moodle_url('/local/o365/acp.php', ['mode' => 'usergroupcustom', 'search' => $searchtext]);
echo $OUTPUT->paging_bar($totalcount, $curpage, $perpage, $cururl);
$this->standard_footer();
}