/** * The standard form definiton. */ public function definition() { $mform = $this->_form; $selectedfields = $this->_customdata['selectedfields']; $overrides = $this->_customdata['overrides']; $fields = tool_downloaddata_processor::get_valid_course_fields(); if (empty($selectedfields)) { $selectedfields = array(get_string('noselectedfields', 'tool_downloaddata')); } $mform->addElement('header', 'generalhdr', get_string('downloadcourses', 'tool_downloaddata')); $formatchoices = array(tool_downloaddata_processor::FORMAT_CSV => get_string('formatcsv', 'tool_downloaddata'), tool_downloaddata_processor::FORMAT_XLS => get_string('formatxls', 'tool_downloaddata')); $mform->addElement('select', 'format', get_string('format', 'tool_downloaddata'), $formatchoices); $mform->setDefault('format', $this->_customdata['format']); $encodings = core_text::get_encodings(); $mform->addElement('select', 'encoding', get_string('encoding', 'tool_downloaddata'), $encodings); $mform->setDefault('encoding', $this->_customdata['encoding']); $mform->disabledIf('encoding', 'format', 'noteq', tool_downloaddata_processor::FORMAT_CSV); $delimiters = csv_import_reader::get_delimiter_list(); $mform->addElement('select', 'delimiter_name', get_string('csvdelimiter', 'tool_downloaddata'), $delimiters); $mform->setDefault('delimiter_name', $this->_customdata['delimiter_name']); $mform->disabledIf('delimiter_name', 'format', 'noteq', tool_downloaddata_processor::FORMAT_CSV); $useoverrides = array('true' => 'Yes', 'false' => 'No'); $mform->addElement('select', 'useoverrides', get_string('useoverrides', 'tool_downloaddata'), $useoverrides); $mform->setDefault('useoverrides', $this->_customdata['useoverrides']); $mform->addHelpButton('useoverrides', 'useoverrides', 'tool_downloaddata'); $sortbycategorypath = array('true' => 'Yes', 'false' => 'No'); $mform->addElement('select', 'sortbycategorypath', get_string('sortbycategorypath', 'tool_downloaddata'), $sortbycategorypath); $mform->setDefault('sortbycategorypath', $this->_customdata['sortbycategorypath']); $mform->addHelpButton('sortbycategorypath', 'sortbycategorypath', 'tool_downloaddata'); $mform->addElement('header', 'fieldshdr', get_string('fields', 'tool_downloaddata')); $mform->setExpanded('fieldshdr', true); // Creating the field selection elements. $objs = array(); $objs[0] = $mform->createElement('select', 'availablefields', get_string('available', 'tool_downloaddata'), $fields, 'size="10"'); $objs[0]->setMultiple(true); $objs[1] = $mform->createElement('select', 'selectedfields', get_string('selected', 'tool_downloaddata'), $selectedfields, 'size="10"'); $objs[1]->setMultiple(true); $group = $mform->addElement('group', 'fieldsgroup', get_string('fields', 'tool_downloaddata'), $objs, ' ', false); $mform->addHelpButton('fieldsgroup', 'fields', 'tool_downloaddata'); // Creating the buttons for the field selection elements. $objs = array(); $objs[] = $mform->createElement('submit', 'addfieldselection', get_string('addfieldselection', 'tool_downloaddata')); $objs[] = $mform->createElement('submit', 'removefieldselection', get_string('removefieldselection', 'tool_downloaddata')); $objs[] = $mform->createElement('submit', 'addallfields', get_string('addallfields', 'tool_downloaddata')); $objs[] = $mform->createElement('submit', 'removeallfields', get_string('removeallfields', 'tool_downloaddata')); $group = $mform->addElement('group', 'buttonsgroup', '', $objs, array(' ', '<br/>'), false); $mform->addElement('header', 'overrideshdr', get_string('overrides', 'tool_downloaddata')); $mform->addElement('textarea', 'overrides', get_string('overrides', 'tool_downloaddata'), 'wrap="virtual" rows="3" cols="45"'); $mform->setType('overrides', PARAM_RAW); $mform->setDefault('overrides', $overrides); $mform->addHelpButton('overrides', 'overrides', 'tool_downloaddata'); if (empty($overrides)) { $mform->setExpanded('overrideshdr', false); } else { $mform->setExpanded('overrideshdr', true); } $this->add_action_buttons(false, get_string('download', 'tool_downloaddata')); $template = '<label class="qflabel" style="vertical-align:top">{label}</label> {element}'; $mform->defaultRenderer()->setGroupElementTemplate($template, 'fieldsgroup'); }
} if (!empty($SESSION->customdata['selectedroles'])) { $roles = $SESSION->customdata['selectedroles']; } else { throw new moodle_exception('emptyroles', 'tool_downloaddata', $returnurl); } $overrides = array(); if ($options['useoverrides']) { try { $overrides = tool_downloaddata_process_overrides($formdata->overrides); } catch (Exception $e) { $e->link = $returnurl; throw $e; } } $processor = new tool_downloaddata_processor($options, $fields, $roles, $overrides); try { $processor->prepare(); } catch (Exception $e) { $e->link = $returnurl; throw $e; } $processor->download(); } } } } } } } }
/** * Tests downloading multiple users with variable number of roles to csv. */ public function test_download_multiple_users_to_csv() { global $DB; $this->resetAfterTest(true); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $roleid1 = $this->getDataGenerator()->create_role(); $roleid2 = $this->getDataGenerator()->create_role(); $roles = get_all_roles(); foreach ($roles as $r) { if ($roleid1 == $r->id) { $role1 = $r; } else { if ($roleid2 == $r->id) { $role2 = $r; } } } $this->getDataGenerator()->enrol_user($user1->id, $course1->id, $role1->id); $this->getDataGenerator()->enrol_user($user2->id, $course1->id, $role1->id); $this->getDataGenerator()->enrol_user($user2->id, $course2->id, $role2->id); $fields = array('username'); $options = self::$optionsuserscsv; // Created new roles, cannot use self::$allroles. $roles = tool_downloaddata_processor::get_all_valid_roles(); $options['sortbycategorypath'] = true; $processor = new tool_downloaddata_processor($options, $fields, $roles); $processor->prepare(); $csv = $processor->get_file_object(); $expectedoutput = array('username,course1,role1,course2,role2', $user1->username . ',' . $course1->shortname . ',' . $role1->shortname . ',,', $user2->username . ',' . $course1->shortname . ',' . $role1->shortname . ',' . $course2->shortname . ',' . $role2->shortname); $expectedoutput = implode("\n", $expectedoutput); $output = rtrim($csv->print_csv_data(true)); // Sorting the output lines as the user order is random. $output = explode("\n", $output); sort($output); $output = implode("\n", $output); $output = rtrim($output); $this->assertEquals($expectedoutput, $output); }