Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 4
0
 /**
  * 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]);
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * 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;
 }
Ejemplo n.º 7
0
 /**
  * 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;
 }