/** * Test set up. * * This is executed before running any test in this file. */ public function setUp() { global $DB; $this->resetAfterTest(); // Reset dataform local cache. \mod_dataform_instance_store::unregister(); // Create a course we are going to add a data module to. $this->course = $this->getDataGenerator()->create_course(); $courseid = $this->course->id; $roles = $DB->get_records_menu('role', array(), '', 'shortname,id'); $editingteacherrolename = \mod_dataform\helper\testing::get_role_shortname('editingteacher'); $studentrolename = \mod_dataform\helper\testing::get_role_shortname('student'); // Teacher. $user = $this->getDataGenerator()->create_user(array('username' => 'teacher')); $this->getDataGenerator()->enrol_user($user->id, $courseid, $roles[$editingteacherrolename]); $this->teacher = $user; // Student 1. $user = $this->getDataGenerator()->create_user(array('username' => 'student1')); $this->getDataGenerator()->enrol_user($user->id, $courseid, $roles[$studentrolename]); $this->student1 = $user; // Student 2. $user = $this->getDataGenerator()->create_user(array('username' => 'student2')); $this->getDataGenerator()->enrol_user($user->id, $courseid, $roles[$studentrolename]); $this->student2 = $user; }
public function test_generator() { global $DB; $this->resetAfterTest(); // Reset dataform local cache. \mod_dataform_instance_store::unregister(); $this->setAdminUser(); $generator = $this->getDataGenerator(); // There should be no instances at this point. $instances = array(); $this->assertEquals(count($instances), $DB->count_records('dataform')); // Verify the datafrom generator. $dataformgenerator = $generator->get_plugin_generator('mod_dataform'); $this->assertInstanceOf('mod_dataform_generator', $dataformgenerator); $this->assertEquals('dataform', $dataformgenerator->get_modulename()); // Add course. $course = $generator->create_course(); // Add instances. $dataset = $this->createCsvDataSet(array('cases' => __DIR__ . '/fixtures/tc_generator.csv')); $cases = $dataset->getTable('cases'); $columns = $dataset->getTableMetaData('cases')->getColumns(); for ($r = 0; $r < $cases->getRowCount(); $r++) { $case = array_combine($columns, $cases->getRow($r)); $case['course'] = $course->id; // Create the instance. $data = $dataformgenerator->create_instance($case); $instances[] = $data->id; $this->assertEquals(count($instances), $DB->count_records('dataform')); // Update the instance. $df = \mod_dataform_dataform::instance($data->id); $df->update($df->data); // Verify instances count. $this->assertEquals(count($instances), $DB->count_records('dataform')); // Verify course id. $this->assertEquals($df->course->id, $course->id); // Verify course module. $cm = get_coursemodule_from_instance('dataform', $df->id); $this->assertEquals($df->cm->id, $cm->id); $this->assertEquals($df->id, $cm->instance); $this->assertEquals('dataform', $cm->modname); $this->assertEquals($course->id, $cm->course); // Verify context. $context = context_module::instance($cm->id); $this->assertEquals($df->context->id, $context->id); $this->assertEquals($df->cm->id, $context->instanceid); // Test gradebook integration using low level DB access - DO NOT USE IN PLUGIN CODE! if ($data->grade) { $gitemparams = array('courseid' => $course->id, 'itemtype' => 'mod', 'itemmodule' => 'dataform', 'iteminstance' => $data->id); $gitem = $DB->get_record('grade_items', $gitemparams); $this->assertNotEmpty($gitem); $this->assertEquals(100, $gitem->grademax); $this->assertEquals(0, $gitem->grademin); $this->assertEquals(GRADE_TYPE_VALUE, $gitem->gradetype); } } $dataid = array_pop($instances); \mod_dataform_dataform::instance($dataid)->delete(); $this->assertEquals(count($instances), $DB->count_records('dataform')); }
public static function instance($dataformid) { if (!($instance = \mod_dataform_instance_store::instance($dataformid, 'notification_manager'))) { $instance = new mod_dataform_notification_manager($dataformid); \mod_dataform_instance_store::register($dataformid, 'notification_manager', $instance); } return $instance; }
/** * Removes instance from local store. * * @param int Dataform id. * @param string Instance type name. * @return void. */ public static function unregister($dataformid = 0, $manager = null) { if (!$dataformid) { self::$instances = array(); } else { if (!$manager) { unset(self::$instances[$dataformid]); } else { unset(self::$instances[$dataformid][$manager]); } } }
/** * Returns and caches (for the current script) if not already, an entries manager for the specified Dataform. * * @param int Dataform id * @return mod_dataform_entry_manager */ public static function instance($dataformid, $viewid) { global $DB; if (!$dataformid) { if (!$viewid or !($dataformid = $DB->get_field('dataform_views', 'dataid', array('id' => $viewid)))) { throw new moodle_exception('invaliddataform', 'dataform', null, null, "Dataform id: {$dataformid}"); } } if (!($instance = \mod_dataform_instance_store::instance($dataformid, "entry_manager-{$viewid}"))) { $instance = new mod_dataform_entry_manager($dataformid, $viewid); \mod_dataform_instance_store::register($dataformid, "entry_manager-{$viewid}", $instance); } return $instance; }
/** * Resets (truncates) all dataform tables to remove any records and reset sequences. * This set of steps is essential for any standalone scenario that adds entries with content * since such a scenario has to refer to input elements by the name field_{fieldid}_{entryid} * (or field_{fieldid}_-1 for a new entry) and the ids have to persist between runs. * * @Given /^a fresh site for dataform scenario$/ * @return array */ public function start_afresh_steps() { global $DB; // Dataform module id. $moduleid = $DB->get_field('modules', 'id', array('name' => 'dataform')); // CM ids. if ($cmids = $DB->get_records('course_modules', array('module' => $moduleid), '', 'id,id AS cmid')) { // Delete properly any existing dataform instances. foreach ($cmids as $cmid) { course_delete_module($cmid); } } // Clean up tables. $tables = array('dataform', 'dataform_contents', 'dataform_entries', 'dataform_fields', 'dataform_filters', 'dataform_views'); $prefix = $DB->get_prefix(); foreach ($tables as $table) { $DB->execute("TRUNCATE TABLE {$prefix}{$table}"); } // Clean up instance store cache. \mod_dataform_instance_store::unregister(); $steps = array(); // Add a course. $data = array('| fullname | shortname | category |', '| Course 1 | C1 | 0 |'); $table = new TableNode(implode("\n", $data)); $steps[] = new Given('the following "courses" exist:', $table); // Add users. $data = array('| username | firstname | lastname | email |', '| teacher1 | Teacher | 1 | teacher1@asd.com |', '| assistant1 | Assistant | 1 | assistant1@asd.com |', '| assistant2 | Assistant | 2 | assistant2@asd.com |', '| student1 | Student | 1 | student1@asd.com |', '| student2 | Student | 2 | student2@asd.com |', '| student3 | Student | 3 | student3@asd.com |'); $table = new TableNode(implode("\n", $data)); $steps[] = new Given('the following "users" exist:', $table); // Enrol users in course. $teacherrole = \mod_dataform\helper\testing::get_role_shortname('editingteacher'); $assistantrole = \mod_dataform\helper\testing::get_role_shortname('teacher'); $studentrole = \mod_dataform\helper\testing::get_role_shortname('student'); $data = array('| user | course | role |', "| teacher1 | C1 | {$teacherrole} |", "| assistant1 | C1 | {$assistantrole} |", "| assistant2 | C1 | {$assistantrole} |", "| student1 | C1 | {$studentrole} |", "| student2 | C1 | {$studentrole} |"); $table = new TableNode(implode("\n", $data)); $steps[] = new Given('the following "course enrolments" exist:', $table); // Add groups. $data = array('| name | description | course | idnumber |', '| Group 1 | Anything | C1 | G1 |', '| Group 2 | Anything | C1 | G2 |'); $table = new TableNode(implode("\n", $data)); $steps[] = new Given('the following "groups" exist:', $table); // Add group members. $data = array('| user | group |', '| student1 | G1 |', '| student2 | G2 |'); $table = new TableNode(implode("\n", $data)); $steps[] = new Given('the following "group members" exist:', $table); return $steps; }
/** * Deletes all this instance's structure and user data and resets its settings to defaults. * * @return bool Always true */ protected function reset() { // Must have manage templates capability. require_capability('mod/dataform:managetemplates', $this->context); // Reset settings. $this->reset_settings(); // Delete all component items. mod_dataform_field_manager::instance($this->id)->delete_fields(); mod_dataform_view_manager::instance($this->id)->delete_views(); mod_dataform_filter_manager::instance($this->id)->delete_filters(); mod_dataform_filter_manager::instance($this->id)->delete_advanced_filters(); mod_dataform_access_manager::instance($this->id)->delete_rules(); mod_dataform_notification_manager::instance($this->id)->delete_rules(); // Reset user data. $this->reset_user_data(); // Delete remaining files (e.g. css, js). $fs = get_file_storage(); $fs->delete_area_files($this->context->id, 'mod_dataform'); // Clean up gradebook. mod_dataform_grade_manager::instance($this->id)->delete_grade_items(); // Refresh events. dataform_refresh_events($this->course->id); // Delete context content. $this->context->delete_content(); // Update instance store. if (\mod_dataform_instance_store::instance($this->id, 'dataform')) { \mod_dataform_instance_store::register($this->id, 'dataform', $this); } return true; }