MDL-11419 - groups: interface enhancements + new features:
[moodle.git] / group / autogroup_form.php
1 <?php // $Id$
3 require_once($CFG->dirroot.'/lib/formslib.php');
5 /// get url variables
6 class autogroup_form extends moodleform {
8     // Define the form
9     function definition() {
10         global $CFG, $COURSE;
12         $mform =& $this->_form;
14         $mform->addElement('header', 'autogroup', get_string('autocreategroups', 'group'));
16         $options = array(get_string('all'));
17         $options += $this->_customdata['roles'];
18         $mform->addElement('select', 'roleid', get_string('selectfromrole', 'group'), $options);
19         $mform->addRule('roleid', get_string('required'), 'required', null, 'client');
21         
22         $options = array('groups' => get_string('groups', 'group'),
23                          'members' => get_string('members', 'group'));
24         $mform->addElement('select', 'groupby', get_string('groupby', 'group'), $options);
25         $mform->addRule('groupby', get_string('required'), 'required', null, 'client');
26         
27         $mform->addElement('text', 'number', get_string('number', 'group'),'maxlength="4" size="4"');
28         $mform->setType('number', PARAM_INT);
29         $mform->addRule('number', null, 'numeric', null, 'client');
30         $mform->addRule('number', get_string('required'), 'required', null, 'client');
31         
32         $options = array('random' => get_string('random', 'group'),
33                          'firstname' => get_string('firstname', 'group'),
34                          'lastname' => get_string('lastname', 'group'));
35                          
36         $mform->addElement('select', 'allocateby', get_string('allocateby', 'group'), $options);
37         $mform->addRule('allocateby', get_string('required'), 'required', null, 'client');
38         
39         $grp[] = $mform->createElement('text', 'namingscheme');
40         $grp[] = $mform->createElement('static', 'namingschemehelp', null, get_string('namingschemehelp', 'group'));
41         $mform->addGroup($grp, 'namingschemegrp', get_string('namingscheme', 'group'), '<br />');
42         
43         $mform->setType('namingschemegrp[namingscheme]', PARAM_RAW);
44         $mform->setDefault('namingschemegrp[namingscheme]', get_string('group', 'group').' @');
45         $mform->addRule('namingschemegrp', get_string('required'), 'required', null, 'client');
46         $mform->setAdvanced('namingschemegrp');
47         
49         $mform->addElement('hidden','courseid');
50         $mform->setType('courseid', PARAM_INT);
51         
52         $mform->addElement('hidden','seed');
53         $mform->setType('seed', PARAM_INT);
54         
55         $buttonarray=array();
56         $buttonarray[] = &$mform->createElement('submit', 'preview', get_string('preview'), 'xx');
57         $buttonarray[] = &$mform->createElement('submit', 'submitbutton', get_string('submit'));
58         $buttonarray[] = &$mform->createElement('cancel');
59         $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false);
60         $mform->closeHeaderBefore('buttonar');
61     }
64     function validation($data) {
65         global $CFG, $COURSE;
66         $errors = array();
68         if (!$users = groups_get_potental_members($data['courseid'], $data['roleid'])) {         
69             $errors['roleid'] = get_string('nousersinrole', 'group');
70         }
71         $usercnt = count($users);
72         
73        /// Check the number entered is sane     
74         if ($data['groupby'] == 'groups') {
76             if ($data['number'] > $usercnt || $data['number'] < 1) {
77                 $errors['number'] = get_string('toomanygroups', 'group', $usercnt);
78             }
79         }
80         
81        /// Check the naming scheme 
82         $matchcnt = preg_match_all('/[#@]{1,1}/', $data['namingschemegrp']['namingscheme'], $matches);
83         
84         if ($matchcnt != 1) {
85             $errors['namingschemegrp'] = get_string('badnamingscheme', 'group');
86         }
87         
88         
89         if (count($errors) > 0) {
90             return $errors;
91         } else {
92             return true;
93         }
94         
95     }
97 }
99 ?>