/**
  * Form definition with two possibilities:
  *
  * 1) User part of group -> allow user to edit or drop group.
  * 2) User not part of group -> allow user to create new group.
  *
  */
 public function definition()
 {
     global $DB, $USER;
     $mform =& $this->_form;
     $mform->addElement('header', 'header', get_string('creategroupheader', BLOCK_SG_LANG_TABLE));
     $sgs = new skills_group_setting($this->courseid);
     if ($sgs->exists()) {
         $sgrouping = new skills_grouping($this->courseid);
         $groupid = $sgrouping->check_for_user_in_grouping($USER->id);
         if ($groupid !== false) {
             $sgroup = new skills_group($groupid);
             $mform->addElement('static', 'existinggroup', get_string('existinggroup', BLOCK_SG_LANG_TABLE), $sgroup->get_group_name());
             $mform->addElement('hidden', 'groupid', $groupid);
             $mform->setType('groupid', PARAM_INT);
             if ($sgs->date_restriction() && time() > $sgs->get_date()) {
                 $mform->addElement('static', 'dateexpired', get_string('dateexpiredleft', BLOCK_SG_LANG_TABLE), get_string('dateexpiredright', BLOCK_SG_LANG_TABLE));
                 $mform->addElement('hidden', 'type', 'expired');
                 $mform->setType('type', PARAM_TEXT);
             } else {
                 $mform->addElement('advcheckbox', 'editmembers', get_string('editmembers', BLOCK_SG_LANG_TABLE), null, null, array(0, 1));
                 // Student can only leave if not already locked.
                 $student = new skills_group_student($this->courseid, $USER->id);
                 if ($student->get_lock_choice() === false) {
                     $mform->addElement('advcheckbox', 'leavegroup', get_string('leavegroup', BLOCK_SG_LANG_TABLE), null, null, array(0, 1));
                     $mform->disabledIf('leavegroup', 'editmembers', 'checked');
                     $mform->disabledIf('editmembers', 'leavegroup', 'checked');
                 }
                 $mform->addElement('hidden', 'type', 'edit');
                 $mform->setType('type', PARAM_TEXT);
             }
             $mform->addElement('advcheckbox', 'allowjoincheck', get_string('groupsearchable', BLOCK_SG_LANG_TABLE), null, null, array(0, 1));
             $mform->disabledIf('allowjoincheck', 'leavegroup', 'checked');
         } else {
             $mform->addElement('static', 'existinggroup', get_string('existinggroup', BLOCK_SG_LANG_TABLE), get_string('nogroup', BLOCK_SG_LANG_TABLE));
             if ($sgs->date_restriction() && time() > $sgs->get_date()) {
                 $mform->addElement('static', 'dateexpired', get_string('dateexpiredleft', BLOCK_SG_LANG_TABLE), get_string('dateexpiredright', BLOCK_SG_LANG_TABLE));
                 $mform->addElement('hidden', 'type', 'expired');
                 $mform->setType('type', PARAM_TEXT);
             } else {
                 if ($sgs->get_allownaming() == true) {
                     $pagegroup = array();
                     $pagegroup[] = $mform->createElement('advcheckbox', 'creategroupcheck', null, null, null, array(0, 1));
                     $pagegroup[] = $mform->createElement('text', 'creategroup', null, array());
                     $mform->setType('creategroup', PARAM_TEXT);
                     $mform->disabledIf('creategroup', 'creategroupcheck');
                     $mform->addGroup($pagegroup, 'create', get_string('creategroup', BLOCK_SG_LANG_TABLE), null, false);
                 } else {
                     // Create element outside of group so that form spacing is correct.
                     $mform->addElement('advcheckbox', 'creategroupcheck', get_string('creategroup', BLOCK_SG_LANG_TABLE), null, null, array(0, 1));
                 }
                 $mform->addElement('hidden', 'type', 'create');
                 $mform->setType('type', PARAM_TEXT);
                 $mform->addElement('advcheckbox', 'allowjoincheck', get_string('groupsearchable', BLOCK_SG_LANG_TABLE), null, null, array(0, 1));
             }
         }
     } else {
         $mform->addElement('static', 'notconfigured', get_string('notconfiguredleft', BLOCK_SG_LANG_TABLE), get_string('notconfiguredright', BLOCK_SG_LANG_TABLE));
     }
     // Hidden elements: courseid needed for posting.
     $mform->addElement('hidden', 'courseid');
     $mform->setType('courseid', PARAM_INT);
     $this->add_action_buttons();
 }
$courseid = required_param('courseid', PARAM_INT);
if (!blocks_skills_group_verify_access('block/skills_group:canmanageskillsgroups', true)) {
    redirect(new moodle_url('/course/view.php', array('id' => $courseid)));
}
$url = new moodle_url('/blocks/skills_group/edit_skills_group_settings.php', array('id' => $courseid, 'sesskey' => $USER->sesskey));
block_skills_group_setup_page($courseid, $url, get_string('editsettingstitle', BLOCK_SG_LANG_TABLE));
$editform = new edit_skills_group_settings_form($courseid);
$toform['courseid'] = $courseid;
// Retrieve any previously used settings.
$sgs = new skills_group_setting($courseid);
if ($sgs->exists()) {
    $toform['feedbacks'] = $sgs->get_feedback_id();
    $toform['groupings'] = $sgs->get_grouping_id();
    $toform['maxsize'] = $sgs->get_group_size();
    $toform['threshold'] = $sgs->get_threshold();
    $toform['allownaming'] = $sgs->get_allownaming();
    if ($sgs->date_restriction()) {
        $toform['datecheck'] = 1;
        $toform['date'] = $sgs->get_date();
    } else {
        $toform['datecheck'] = 0;
        $toform['date'] = null;
    }
}
$editform->set_data($toform);
if ($editform->is_cancelled()) {
    $courseurl = new moodle_url('/course/view.php', array('id' => $courseid));
    redirect($courseurl);
} else {
    if ($fromform = $editform->get_data()) {
        process_form($courseid, $fromform);