Exemplo n.º 1
0
 /**
  * Associates a cluster with a curriculum.
  */
 public static function associate($cluster, $curriculum, $autoenrol = true)
 {
     global $DB;
     // make sure we don't double-associate
     if ($DB->record_exists(self::TABLE, array('clusterid' => $cluster, 'curriculumid' => $curriculum))) {
         return;
     }
     // ELIS-7582
     @set_time_limit(0);
     $record = new clustercurriculum();
     $record->clusterid = $cluster;
     $record->autoenrol = !empty($autoenrol) ? 1 : 0;
     $record->curriculumid = $curriculum;
     $record->save();
     /**
      * Assign all users in the cluster with curriculum.  Don't assign users
      * if already assigned
      */
     /**
      * @todo we may need to change this if associating a user with a
      * curriculum does anything more complicated
      */
     // assign cluster members as students in the newly-associated curriculum if the
     // association has autoenrol set and the users are not already in the curriculum
     if (!empty($autoenrol)) {
         $timenow = time();
         $sql = 'INSERT INTO {' . curriculumstudent::TABLE . '} ' . '(userid, curriculumid, timecreated, timemodified) ' . 'SELECT DISTINCT u.id, ' . $curriculum . ', ' . $timenow . ', ' . $timenow . ' ' . 'FROM {' . clusterassignment::TABLE . '} clu ' . 'INNER JOIN {' . user::TABLE . '} u ON u.id = clu.userid ' . 'LEFT OUTER JOIN {' . curriculumstudent::TABLE . '} ca ON ca.userid = u.id AND ca.curriculumid = \'' . $curriculum . '\' ' . 'WHERE clu.clusterid = ? AND ca.curriculumid IS NULL';
         $params = array($cluster);
         $DB->execute($sql, $params);
     }
     //        events_trigger('pm_userset_program_associated', $record);
 }
Exemplo n.º 2
0
 /**
  * Validate that deleting a userset deletes all appropriate associations
  */
 public function test_delete_elis_userset_deletes_associations()
 {
     global $CFG, $DB;
     // Entities.
     require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php';
     require_once elispm::lib('data/userset.class.php');
     require_once elispm::lib('data/user.class.php');
     require_once elispm::lib('data/curriculum.class.php');
     require_once elispm::lib('data/track.class.php');
     require_once elis::lib('data/customfield.class.php');
     // Associations.
     require_once elispm::lib('data/clusterassignment.class.php');
     require_once elispm::lib('data/clustercurriculum.class.php');
     require_once elispm::lib('data/clustertrack.class.php');
     require_once elispm::file('enrol/userset/moodleprofile/userset_profile.class.php');
     // For context level access.
     require_once elispm::file('accesslib.php');
     $origfieldcount = $DB->count_records(field::TABLE);
     // Set up user set.
     $userset = new userset(array('name' => 'testusersetname'));
     $userset->save();
     // Set up other entities and associations.
     // Cluster enrolment.
     $user = new user(array('idnumber' => 'testuseridnumber', 'username' => 'testuserusername', 'firstname' => 'testuserfirstname', 'lastname' => 'testuserlastname', 'email' => '*****@*****.**', 'country' => 'CA'));
     $user->save();
     $clusterassignment = new clusterassignment(array('clusterid' => $userset->id, 'userid' => $user->id));
     $clusterassignment->save();
     // Cluster-curriculum assignment.
     $curriculum = new curriculum(array('idnumber' => 'testcurriculumidnumber'));
     $curriculum->save();
     $clustercurriculum = new clustercurriculum(array('clusterid' => $userset->id, 'curriculumid' => $curriculum->id));
     $clustercurriculum->save();
     // Cluster-track assignment.
     $track = new track(array('curid' => $curriculum->id, 'idnumber' => 'testtrackidnumber'));
     $track->save();
     $clustertrack = new clustertrack(array('clusterid' => $userset->id, 'trackid' => $track->id));
     $clustertrack->save();
     // Custom field.
     $field = new field(array('name' => 'testfieldname', 'categoryid' => 9999));
     $field->save();
     $context = \local_elisprogram\context\userset::instance($userset->id);
     $data = new field_data_int(array('contextid' => $context->id, 'fieldid' => $field->id, 'data' => 1));
     $data->save();
     // Cluster profile criteria.
     $clusterprofile = new userset_profile(array('clusterid' => $userset->id, 'fieldid' => $field->id, 'value' => 0));
     $clusterprofile->save();
     // Validate setup.
     $this->assertEquals(1, $DB->count_records(userset::TABLE));
     $this->assertEquals(1, $DB->count_records(user::TABLE));
     $this->assertEquals(1, $DB->count_records(clusterassignment::TABLE));
     $this->assertEquals(1, $DB->count_records(curriculum::TABLE));
     $this->assertEquals(1, $DB->count_records(clustercurriculum::TABLE));
     $this->assertEquals(1, $DB->count_records(track::TABLE));
     $this->assertEquals(1, $DB->count_records(clustertrack::TABLE));
     $this->assertEquals(1 + $origfieldcount, $DB->count_records(field::TABLE));
     $this->assertEquals(1, $DB->count_records(field_data_int::TABLE));
     $this->assertEquals(1, $DB->count_records(userset_profile::TABLE));
     // Run the import.
     $data = array('action' => 'delete');
     $this->run_core_userset_import($data, true);
     // Validation.
     $this->assertEquals(0, $DB->count_records(userset::TABLE));
     $this->assertEquals(1, $DB->count_records(user::TABLE));
     $this->assertEquals(0, $DB->count_records(clusterassignment::TABLE));
     $this->assertEquals(1, $DB->count_records(curriculum::TABLE));
     $this->assertEquals(0, $DB->count_records(clustercurriculum::TABLE));
     $this->assertEquals(1, $DB->count_records(track::TABLE));
     $this->assertEquals(0, $DB->count_records(clustertrack::TABLE));
     $this->assertEquals(1 + $origfieldcount, $DB->count_records(field::TABLE));
     $this->assertEquals(0, $DB->count_records(field_data_int::TABLE));
     $this->assertEquals(0, $DB->count_records(userset_profile::TABLE));
 }
 /**
  * Test available table shows only programs the user has permission to enrol into based on
  * local/elisprogram:program_enrol_userset_user permission on a parent userset.
  *
  * @dataProvider dataprovider_available_permissions_program_enrol_userset_user
  * @param array $usersetidsforperm An array of userset IDs to assign the local/elisprogram:program_enrol_userset_user on.
  * @param array $clusterassignments An array of arrays of parameters to construct clusterassignments with.
  * @param array $clustercurriculums An array of arrays of parameters to construct clustercurriculums with.
  * @param int $tableuserid The id of the user to manage associations for.
  * @param array $expectedresults The expected page of results.
  * @param int $expectedtotal The expected number of total results.
  */
 public function test_available_permissions_program_enrol_userset_user($usersetidsforperm, $clusterassignments, $clustercurriculums, $tableuserid, $expectedresults, $expectedtotal)
 {
     global $USER, $DB, $CFG;
     $userbackup = $USER;
     // Import usersets.
     $dataset = $this->createCsvDataSet(array(userset::TABLE => elispm::file('tests/fixtures/deepsight_userset.csv')));
     $this->loadDataSet($dataset);
     // Set up permissions.
     $USER = $this->setup_permissions_test();
     // Initialize userset contexts.
     for ($i = 1; $i <= 5; $i++) {
         $ctx = \local_elisprogram\context\userset::instance($i);
     }
     accesslib_clear_all_caches(true);
     // Set up capabilities.
     $capability = 'local/elisprogram:program_enrol_userset_user';
     foreach ($usersetidsforperm as $usersetid) {
         $this->give_permission_for_context($USER->id, $capability, \local_elisprogram\context\userset::instance($usersetid));
     }
     // Create clusterassignments.
     foreach ($clusterassignments as $clusterassignment) {
         $clusterassignment = new clusterassignment($clusterassignment);
         $clusterassignment->save();
     }
     // Create clustercurriculums.
     foreach ($clustercurriculums as $clustercurriculum) {
         $clustercurriculum = new clustercurriculum($clustercurriculum);
         $clustercurriculum->save();
     }
     // Construct test table.
     $table = new deepsight_datatable_userprogram_available_mock($DB, 'test', 'http://localhost', 'testuniqid');
     $table->set_userid($tableuserid);
     // Perform test.
     $actualresults = $table->get_search_results(array(), array(), 0, 20);
     // Verify.
     $this->assert_search_results($expectedresults, $expectedtotal, $actualresults);
 }
Exemplo n.º 4
0
 /**
  * Test validation of duplicates
  * @expectedException data_object_validation_exception
  */
 public function test_clustercurriculum_validationpreventsduplicates()
 {
     $this->load_csv_data();
     $clustercurriculum = new clustercurriculum(array('clusterid' => 1, 'curriculumid' => 1));
     $clustercurriculum->save();
 }
 /**
  * Test available table doesn't show assigned usersets.
  * @dataProvider dataprovider_available_doesnt_show_assigned_usersets
  * @param array $associations An array of arrays of parameters to construct clustercurriculum associations.
  * @param int $tableprogramid The ID of the program we're going to manage.
  * @param array $expectedresults The expected page of results.
  * @param int $expectedtotal The expected number of total results.
  */
 public function test_available_doesnt_show_assigned_usersets($associations, $tableprogramid, $expectedresults, $expectedtotal)
 {
     global $USER, $DB, $CFG;
     $userbackup = $USER;
     // Set up permissions.
     $USER = $this->setup_permissions_test();
     $this->give_permission_for_context($USER->id, 'local/elisprogram:associate', context_system::instance());
     foreach ($associations as $association) {
         $clustercurriculum = new clustercurriculum($association);
         $clustercurriculum->save();
     }
     // Construct test table.
     $table = new deepsight_datatable_programuserset_available_mock($DB, 'test', 'http://localhost', 'testuniqid');
     $table->set_programid($tableprogramid);
     // Perform test.
     $actualresults = $table->get_search_results(array(), array(), 0, 20);
     // Verify result.
     $this->assert_search_results($expectedresults, $expectedtotal, $actualresults);
     // Restore user.
     $USER = $userbackup;
 }