/** * Test make_filter_options_custom function */ public function test_make_filter_options_custom() { global $DB; // Fixture. $datagenerator = new elis_program_datagenerator($DB); $pgm = $datagenerator->create_program(); $course = $datagenerator->create_course(); $pmclass = $datagenerator->create_pmclass(array('courseid' => $course->id)); $dataset = $this->createCsvDataSet(array('local_elisprogram_env' => elispm::file('tests/fixtures/environment.csv'))); $this->loadDataSet($dataset); // Tests. $choicestests = array('curriculum' => array('name' => array($pgm->id => $pgm->name)), 'course' => array('name' => array($course->id => $course->name)), 'class' => array('idnumber' => array($pmclass->id => $pmclass->idnumber), 'environmentid' => array(1 => 'Testing'))); foreach ($choicestests as $group => $names) { foreach ($names as $name => $expectedchoices) { $curclassopts = array('choices' => array(), 'wrapper' => array($group => '')); $filter = new generalized_filter_curriculumclass('filt-curriculumclass', 'Null', $curclassopts); $options = $filter->make_filter_options_custom(array(), $group, $name); $this->assertInternalType('array', $options); $this->assertArrayHasKey('choices', $options); $this->assertInternalType('array', $options['choices']); $this->assertEquals($expectedchoices, $options['choices']); unset($filter); } } }
/** * Test validation of duplicates * @expectedException data_object_validation_exception */ public function test_classmoodlecourse_preventsduplicates() { $dataset = $this->createCsvDataSet(array(classmoodlecourse::TABLE => elispm::file('tests/fixtures/class_moodle_course.csv'))); $this->loadDataSet($dataset); $classmoodlecourse = new classmoodlecourse(array('classid' => 100, 'moodlecourseid' => 100)); $classmoodlecourse->save(); }
/** * Set up all data needed for testing. * @param array $userids List of moodle user ids to test with. * @param array $itemgrades List of grade item grades to test with. */ public function fixture_moodleenrol($userids, $itemgrades) { global $DB; // Import CSV data. $dataset = $this->createCsvDataSet(array(course::TABLE => elispm::file('tests/fixtures/pmcourse.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), 'user' => elispm::file('tests/fixtures/mdluser.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), usermoodle::TABLE => elispm::file('tests/fixtures/user_moodle.csv'), coursecompletion::TABLE => elispm::file('tests/fixtures/course_completion.csv'))); $this->loadDataSet($dataset); // Create course. $course = $this->getDataGenerator()->create_course(); // Link with ELIS class. $DB->insert_record(classmoodlecourse::TABLE, (object) array('classid' => 100, 'moodlecourseid' => $course->id)); // Create grade items. $items = array(array('courseid' => $course->id, 'idnumber' => 'required', 'itemtype' => 'manual'), array('courseid' => $course->id, 'idnumber' => 'notrequired', 'itemtype' => 'manual'), array('courseid' => $course->id, 'idnumber' => 'course', 'itemtype' => 'course')); foreach ($items as $item) { $DB->insert_record('grade_items', (object) $item); } // Set up our test role. $roleid = create_role('gradedrole', 'gradedrole', 'gradedrole'); set_config('gradebookroles', $roleid); // Create all of our test enrolments. foreach ($userids as $userid) { $this->getDataGenerator()->enrol_user($userid, $course->id, $roleid); } // Assign item grades. foreach ($itemgrades as $itemgrade) { $DB->insert_record('grade_grades', (object) $itemgrade); } }
/** * Load iniital data from CSVs. */ protected function load_csv_data() { $dataset = $this->createCsvDataSet(array('user' => elispm::file('tests/fixtures/mdluser.csv'), 'user_info_field' => elispm::file('tests/fixtures/user_info_field.csv'), 'user_info_data' => elispm::file('tests/fixtures/user_info_data.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), usermoodle::TABLE => elispm::file('tests/fixtures/usermoodle.csv'), field::TABLE => elispm::file('tests/fixtures/user_field.csv'), field_owner::TABLE => elispm::file('tests/fixtures/user_field_owner.csv'), curriculum::TABLE => elispm::file('tests/fixtures/curriculum.csv'), track::TABLE => elispm::file('tests/fixtures/track.csv'), course::TABLE => elispm::file('tests/fixtures/pmcourse.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), userset::TABLE => elispm::file('tests/fixtures/userset.csv'))); $dataset = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($dataset); $dataset->addSubStrReplacement('\\n', "\n"); $this->loadDataSet($dataset); }
/** * Test get_corequisites function. */ public function test_get_corequisites() { $dataset = $this->createCsvDataSet(array(curriculumcourse::TABLE => elispm::file('tests/fixtures/curriculum_course.csv'), coursecorequisite::TABLE => elispm::file('tests/fixtures/pmcourse_corequisite.csv'))); $this->loadDataSet($dataset); $curriculumcourse = new curriculumcourse(); $curriculumcourse->id = 2; $coreqs = $curriculumcourse->get_corequisites(); $this->assertEquals(array(100), $coreqs); }
function get_options($dataobject) { global $DB; require_once elispm::file('plugins/usetclassify/usersetclassification.class.php'); $result = array(); $recs = $DB->get_recordset(usersetclassification::TABLE, null, 'name ASC', 'shortname, name'); foreach ($recs as $rec) { $result[$rec->shortname] = $rec->name; } unset($recs); return $result; }
/** * Test format_course_listing function. */ public function test_format_course_listing() { // Fixture. $dataset = $this->createCsvDataSet(array(curriculumcourse::TABLE => elispm::file('tests/fixtures/curriculum_course.csv'))); $this->loadDataSet($dataset); // Test. $courses = array(1 => null, 100 => null); $pmclass = new pmclass(); $listing = $pmclass->format_course_listing($courses); // Verify. $expected = array(1 => array(1 => 1, 100 => 2)); $this->assertEquals($expected, $listing); }
/** * Tests deepsight_datatable_usersetuser_base::get_userset_subsets * @dataProvider dataprovider_get_userset_subsets * @param int $parentuserset The ID of a userset to pass to the function as the parent userset ID. * @param bool $includeparent Whether to include the parent ID in the return array. * @param array $expectedresults The expected return value. */ public function test_get_userset_subsets($parentuserset, $includeparent, $expectedresults) { $dataset = $this->createCsvDataSet(array(user::TABLE => elispm::file('tests/fixtures/deepsight_user.csv'), userset::TABLE => elispm::file('tests/fixtures/deepsight_usersetwithsubsets.csv'))); $this->loadDataSet($dataset); accesslib_clear_all_caches(true); // Set up contexts. for ($i = 1; $i <= 6; $i++) { $ctx = \local_elisprogram\context\userset::instance($i); } accesslib_clear_all_caches(true); $actualresults = deepsight_datatable_standard::get_userset_subsets($parentuserset, $includeparent); $this->assertEquals($expectedresults, array_keys($actualresults)); }
/** * Load initial data from CSVs. */ protected function load_csv_data() { $dataset = $this->createCsvDataSet(array('user' => elispm::file('tests/fixtures/mdluser.csv'), 'user_info_field' => elispm::file('tests/fixtures/user_info_field.csv'), 'user_info_data' => elispm::file('tests/fixtures/user_info_data.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), usermoodle::TABLE => elispm::file('tests/fixtures/usermoodle.csv'), field::TABLE => elispm::file('tests/fixtures/user_field.csv'), field_owner::TABLE => elispm::file('tests/fixtures/user_field_owner.csv'))); $dataset = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($dataset); $dataset->addSubStrReplacement('\\n', "\n"); $this->loadDataSet($dataset); // Load field data next (we need the user context ID and context level). $usercontext = \local_elisprogram\context\user::instance(103); $dataset = $this->createCsvDataSet(array(field_contextlevel::TABLE => elispm::file('tests/fixtures/user_field_contextlevel.csv'), field_category_contextlevel::TABLE => elispm::file('tests/fixtures/user_field_category_contextlevel.csv'), field_data_int::TABLE => elispm::file('tests/fixtures/user_field_data_int.csv'), field_data_char::TABLE => elispm::file('tests/fixtures/user_field_data_char.csv'), field_data_text::TABLE => elispm::file('tests/fixtures/user_field_data_text.csv'))); $dataset = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($dataset); $dataset->addFullReplacement('##USERCTXID##', $usercontext->id); $dataset->addFullReplacement('##USERCTXLVL##', CONTEXT_ELIS_USER); $this->loadDataSet($dataset); }
/** * This method is called before the first test of this test class is run. */ public function setUp() { global $DB, $USER; parent::setUp(); // Create data we need for many test cases. set_config('defaultenrol', 1, 'enrol_guest'); set_config('status', ENROL_INSTANCE_DISABLED, 'enrol_guest'); set_config('enrol_plugins_enabled', 'manual,guest'); // Load initial data from CSVs. $dataset = $this->createCsvDataSet(array('course' => elispm::file('tests/fixtures/autocreatemoodlecourse_course.csv'), pmclass::TABLE => elispm::file('tests/fixtures/autocreatemoodlecourse_class.csv'), course::TABLE => elispm::file('tests/fixtures/autocreatemoodlecourse_coursedescription.csv'), coursetemplate::TABLE => elispm::file('tests/fixtures/autocreatemoodlecourse_coursetemplate.csv'))); $this->loadDataSet($dataset); // Set current user as admin. $this->setAdminUser(); }
/** * Load CSV data for use in this test class. * @param boolean $createnonrequiredlos set to true to create non-required learning objective records * @param $createrequiredlos set to true to create required learning objective records */ public function load_csv_data($createnonrequiredlos = false, $createrequiredlos = false) { // NOTE: for now, can only use one of two parameters. $csvs = array(course::TABLE => elispm::file('tests/fixtures/pmcoursewithgrade.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), usermoodle::TABLE => elispm::file('tests/fixtures/usermoodle.csv'), 'user' => elispm::file('tests/fixtures/mdluser.csv')); if ($createnonrequiredlos) { // Want a non-required learning objective. $csvs[coursecompletion::TABLE] = elispm::file('tests/fixtures/course_completion_nonrequired.csv'); } else { if ($createrequiredlos) { // Want a required learning objective. $csvs[coursecompletion::TABLE] = elispm::file('tests/fixtures/course_completion_required.csv'); } } $dataset = $this->createCsvDataSet($csvs); $this->loadDataSet($dataset); }
/** * Set up necessary data * * @param int $numfields The number of custom fields used in auto-association */ private function init_required_data($numfields = 1) { global $CFG, $DB; require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php'; require_once elis::file('eliscore/fields/moodleprofile/custom_fields.php'); require_once elis::lib('data/customfield.class.php'); require_once elispm::file('accesslib.php'); require_once elispm::lib('data/userset.class.php'); require_once $CFG->dirroot . '/user/profile/definelib.php'; require_once $CFG->dirroot . '/user/profile/field/checkbox/define.class.php'; // Set up the category only once. $fieldcategory = new field_category(array('name' => 'testcategoryname')); $fieldcategory->save(); // Ste up the target userset only once. $userset = new userset(array('name' => 'testusersetname')); $userset->save(); for ($i = 1; $i <= $numfields; $i++) { // Custom field. $field = new field(array('categoryid' => $fieldcategory->id, 'shortname' => 'testfieldshortname' . $i, 'name' => 'testfieldname' . $i, 'datatype' => 'bool')); $field->save(); // Ensure manual field owner exists for syncing. field_owner::ensure_field_owner_exists($field, 'manual'); $ownerid = $DB->get_field(field_owner::TABLE, 'id', array('fieldid' => $field->id, 'plugin' => 'manual')); $owner = new field_owner($ownerid); $owner->param_control = 'checkbox'; $owner->save(); // Ensure moodle profile field owner exists. field_owner::ensure_field_owner_exists($field, 'moodle_profile'); $DB->execute("UPDATE {" . field_owner::TABLE . "} SET exclude = ?", array(pm_moodle_profile::sync_to_moodle)); // Field context level assocation. $fieldcontextlevel = new field_contextlevel(array('fieldid' => $field->id, 'contextlevel' => CONTEXT_ELIS_USER)); $fieldcontextlevel->save(); // The associated Moodle user profile field. $profiledefinecheckbox = new profile_define_checkbox(); $data = new stdClass(); $data->datatype = 'checkbox'; $data->categoryid = 99999; $data->shortname = 'testfieldshortname' . $i; $data->name = 'testfieldname' . $i; $profiledefinecheckbox->define_save($data); $mfield = $DB->get_record('user_info_field', array('shortname' => 'testfieldshortname' . $i)); // The "cluster-profile" association. $usersetprofile = new userset_profile(array('clusterid' => $userset->id, 'fieldid' => $mfield->id, 'value' => 1)); $usersetprofile->save(); } }
function display_default() { require_once elispm::file('form/configcrsdefaultform.class.php'); $configform = new configcrsdefaultform('index.php?s=dftcrs§ion=admn', $this); $configform->set_data(elis::$config->local_elisprogram); if ($configdata = $configform->get_data()) { $this->_config_set_value($configdata, 'crsdftname', 0); $this->_config_set_value($configdata, 'crsdftcode', 0); $this->_config_set_value($configdata, 'crsdftidnumber'); $this->_config_set_value($configdata, 'crsdftsyllabus', 0); $this->_config_set_value($configdata, 'crsdftlengthdescription', 0); $this->_config_set_value($configdata, 'crsdftlength', 0); $this->_config_set_value($configdata, 'crsdftcredits', 0); $this->_config_set_value($configdata, 'crsdftcompletion_grade', 0); $this->_config_set_value($configdata, 'crsdftenvironmentid', 0); $this->_config_set_value($configdata, 'crsdftcost', 0); $this->_config_set_value($configdata, 'crsdftversion', 0); } $configform->display(); }
function display_default() { require_once elispm::file('form/configclsdefaultform.class.php'); $configform = new configclsdefaultform('index.php?s=dftcls§ion=admn', $this); $configform->set_data(elis::$config->local_elisprogram); if ($configdata = $configform->get_data()) { if (isset($configdata->clsdftstarttime)) { $configdata->clsdftstarttime = $configdata->clsdftstarttime % DAYSECS; } if (isset($configdata->clsdftendtime)) { $configdata->clsdftendtime = $configdata->clsdftendtime % DAYSECS; } $this->_config_set_value($configdata, 'clsdftidnumber', 0); $this->_config_set_value($configdata, 'clsdftstartdate', 0); $this->_config_set_value($configdata, 'clsdftenddate', 0); $this->_config_set_value($configdata, 'clsdftstarttime'); $this->_config_set_value($configdata, 'clsdftendtime', 0); $this->_config_set_value($configdata, 'clsdftmaxstudents', 0); $this->_config_set_value($configdata, 'clsdftenvironmentid', 0); } $configform->display(); }
/** * Test check_for_completed_nags function with completion time in the past. */ public function test_checkforcompletednagsdate() { global $DB; $dataset = $this->createCsvDataSet(array(user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), curriculum::TABLE => elispm::file('tests/fixtures/curriculum.csv'), curriculumstudent::TABLE => elispm::file('tests/fixtures/curriculum_student.csv'), course::TABLE => elispm::file('tests/fixtures/pmcourse.csv'), curriculumcourse::TABLE => elispm::file('tests/fixtures/curriculum_course.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), student::TABLE => elispm::file('tests/fixtures/student.csv'))); $this->loadDataSet($dataset); // Set the course to be required in the program. $sql = "UPDATE {" . curriculumcourse::TABLE . "} SET required = 1 WHERE curriculumid = 1 AND courseid = 100"; $DB->execute($sql); // Set the completion time to a month ago and status to completed on the class enrolment. $completetime = time() - 2592000; $sql = 'UPDATE {' . student::TABLE . '} SET completetime = ' . $completetime . ', completestatusid = 2 WHERE userid = 103 AND classid = 100'; $DB->execute($sql); // Execute check_for_completed_nags. $curriculum = new curriculum(1); $curriculum->load(); $result = $curriculum->check_for_completed_nags(); // Verify completion time in program assignment table. $recordset = curriculumstudent::get_curricula(103); foreach ($recordset as $record) { $this->assertEquals(1, $record->curid); $this->assertEquals($completetime, $record->timecompleted); } }
/** * Do any setup before tests that rely on data in the database - i.e. create users/courses/classes/etc or import csvs. */ protected function set_up_tables() { $dataset = $this->createCsvDataSet(array(curriculum::TABLE => elispm::file('tests/fixtures/deepsight_program.csv'), track::TABLE => elispm::file('tests/fixtures/deepsight_track.csv'), userset::TABLE => elispm::file('tests/fixtures/deepsight_userset.csv'), user::TABLE => elispm::file('tests/fixtures/deepsight_user.csv'))); $this->loadDataSet($dataset); }
/** * Load initial data from CSVs. */ protected function load_csv_data() { $dataset = $this->createCsvDataSet(array(courseprerequisite::TABLE => elispm::file('tests/fixtures/course_prerequisite.csv'))); $this->loadDataSet($dataset); }
* but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * @package local_elisprogram * @author Remote-Learner.net Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2008-2013 Remote Learner.net Inc http://www.remote-learner.net * */ defined('MOODLE_INTERNAL') || die; require_once elispm::file('form/cmform.class.php'); require_once elispm::file('usersetpage.class.php'); /** * Form for adding and editing clusters * * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class usersetform extends cmform { /** * items in the form */ public function definition() { global $CURMAN, $CFG; parent::definition(); $mform =& $this->_form;
/** * 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); }
/** * Fixes idnumbers for Program Management users to remove duplicates * @return boolean true on success, otherwise false */ function pm_fix_duplicate_pm_users() { global $CFG, $DB; require_once $CFG->dirroot . '/lib/ddllib.php'; require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php'; require_once elispm::lib('notifications.php'); require_once elispm::lib('data/user.class.php'); require_once elispm::file('userpage.class.php'); $dbman = $DB->get_manager(); // Delete duplicate class completion element grades $xmldbtable = new xmldb_table('local_elisprogram_usr_idntmp'); if ($dbman->table_exists($xmldbtable)) { $dbman->drop_table($xmldbtable); } $result = true; // Create temporary table for storing qualifying idnumbers $table = new xmldb_table('local_elisprogram_usr_idntmp'); $table->add_field('idnumber', XMLDB_TYPE_CHAR, '255', NULL, XMLDB_NOTNULL); $dbman->create_table($table); $sql = "INSERT INTO {local_elisprogram_usr_idntmp}\n SELECT idnumber\n FROM {" . user::TABLE . "}\n GROUP BY idnumber\n HAVING idnumber != ''\n AND COUNT(*) > 1"; $result = $result && $DB->execute($sql); $admin = get_admin(); // Look up the list of duplicate idnumbers if ($rs = $DB->get_recordset('local_elisprogram_usr_idntmp')) { foreach ($rs as $record) { // Store whether we're currently on the first user record, whose idnumber // will not change $first = true; // Store the userids and usernames of the appropriate users $userids = array(); $usernames = array(); // Store whether there was some failure generating an idnumber $idnumber_generation_failure = false; // By default, obtain the least recently modified record $sort_condition = 'timemodified'; $sql = "SELECT pu.id\n FROM {user} mu\n JOIN {" . user::TABLE . "} pu\n ON mu.idnumber = pu.idnumber\n AND mu.username = pu.username\n AND mu.idnumber = ?"; $params = array($record->idnumber); if ($correct_record = $DB->get_record_sql($sql, $params, IGNORE_MULTIPLE)) { // Found corresponding user with username and idnumber matching, so // prioritize it $sort_condition = 'id = ' . $correct_record->id . ' DESC'; } if ($rs2 = $DB->get_recordset(user::TABLE, array('idnumber' => $record->idnumber), $sort_condition)) { foreach ($rs2 as $record2) { // Store information about the current user $userids[] = $record2->id; $usernames[] = $record2->username; // Store whether some idnumber generation attempt was successful $generated = false; if (!$first) { // Use this flag to determine if a unique random string was generated // Attempt to generate a unique random idnumber for ($i = 0; $i < 10; $i++) { $record2->idnumber = random_string(15); if (!$DB->record_exists('user', array('idnumber' => $record2->idnumber)) && !$DB->record_exists(user::TABLE, array('idnumber' => $record2->idnumber))) { $DB->update_record(user::TABLE, $record2); $generated = true; break; } } } if (!$first && !$generated) { //this is where we would ideally send a failure message $idnumber_generation_failure = true; } $first = false; } } //this is where we would ideally send a success message but it's current //not possible because this is called during the upgrade before the messages //setup happens } } // Drop the temp table $result = $result && $DB->execute("DROP TABLE {local_elisprogram_usr_idntmp}"); return $result; }
/** * Run all upgrade steps from before elis 2.6. * * @param int $oldversion The currently installed version of the old component. * @return bool Success/Failure. */ function elisprogram_usetclassify_pre26upgradesteps($oldversion) { global $CFG, $THEME, $DB; $dbman = $DB->get_manager(); $result = true; if ($oldversion < 2011071400) { // Rename field. $field = field::find(new field_filter('shortname', '_elis_cluster_classification')); if ($field->valid()) { $field = $field->current(); $field->shortname = USERSET_CLASSIFICATION_FIELD; if ($field->name == 'Cluster classification') { // Rhe field name hasn't been changed from the old default. $field->name = get_string('classification_field_name', 'elisprogram_usetclassify'); } $field->save(); $category = $field->category; if ($category->name == 'Cluster classification') { // The field name hasn't been changed from the old default. $category->name = get_string('classification_category_name', 'elisprogram_usetclassify'); $category->save(); } } upgrade_plugin_savepoint($result, 2011071400, 'pmplugins', 'userset_classification'); } if ($result && $oldversion < 2011101200) { $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD)); if ($field->valid()) { $field = $field->current(); if ($owner = new field_owner(!isset($field->owners) || !isset($field->owners['manual']) ? false : $field->owners['manual'])) { $owner->fieldid = $field->id; $owner->plugin = 'manual'; //$owner->exclude = 0; // TBD $owner->param_help_file = 'elisprogram_usetclassify/cluster_classification'; $owner->save(); } } upgrade_plugin_savepoint($result, 2011101200, 'pmplugins', 'userset_classification'); } if ($result && $oldversion < 2011101800) { // Userset -> 'User Set'. $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD)); if ($field->valid()) { $field = $field->current(); if (stripos($field->name, 'Userset') !== false) { $field->name = str_ireplace('Userset', 'User Set', $field->name); $field->save(); } $category = $field->category; if (stripos($category->name, 'Userset') !== false) { $category->name = str_ireplace('Userset', 'User Set', $category->name); $category->save(); } } upgrade_plugin_savepoint($result, 2011101800, 'pmplugins', 'userset_classification'); } if ($result && $oldversion < 2011110300) { // Make sure to rename the default classification name from "Cluster" to "User set". require_once elispm::file('plugins/usetclassify/usersetclassification.class.php'); // Make sure there are no custom fields with invalid categories. pm_fix_orphaned_fields(); $field = field::find(new field_filter('shortname', USERSET_CLASSIFICATION_FIELD)); if ($field->valid()) { $field = $field->current(); $category = $field->category; $default = usersetclassification::find(new field_filter('shortname', 'regular')); if ($default->valid()) { $default = $default->current(); $default->name = get_string('cluster', 'local_elisprogram'); $default->save(); } // Upgrade field owner data for the default User Set field. $field = field::ensure_field_exists_for_context_level($field, CONTEXT_ELIS_USERSET, $category); $owners = field_owner::find(new field_filter('fieldid', $field->id)); if ($owners->valid()) { foreach ($owners as $owner) { if ($owner->plugin == 'cluster_classification') { $owner->plugin = 'userset_classification'; $owner->save(); } else { if ($owner->plugin == 'manual') { $owner->param_options_source = 'userset_classifications'; $owner->param_help_file = 'elisprogram_usetclassify/cluster_classification'; $owner->save(); } } } } upgrade_plugin_savepoint($result, 2011110300, 'pmplugins', 'userset_classification'); } } return $result; }
/** * Load data from CSV files for enrolment test. */ protected function load_csv_data_for_enrolment_test() { $dataset = $this->createCsvDataSet(array('course' => elispm::file('tests/fixtures/mdlcourse.csv'), 'user' => elispm::file('tests/fixtures/mdluser.csv'), classmoodlecourse::TABLE => elispm::file('tests/fixtures/class_moodle_course.csv'), course::TABLE => elispm::file('tests/fixtures/pmcrs.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), usermoodle::TABLE => elispm::file('tests/fixtures/usermoodle.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'))); $this->loadDataSet($dataset); }
/** * Load PHPUnit test data */ protected function load_csv_data() { $dataset = $this->createCsvDataSet(array(certificatesettings::TABLE => elispm::file('tests/fixtures/certificate_settings.csv'))); $this->loadDataSet($dataset); }
* This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * @package local_elisprogram * @author Remote-Learner.net Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2008-2013 Remote Learner.net Inc http://www.remote-learner.net * */ defined('MOODLE_INTERNAL') || die; require_once elispm::file('form/cmform.class.php'); require_once elispm::lib('lib.php'); /** * the form element for curriculum */ class cmCurriculaForm extends cmform { /** * defines items in the form */ public function definition() { $configData = array('title'); if ($this->_customdata['obj']) { // FIXME: This is probably not be the right place for set_data. Move it. $this->set_data($this->_customdata['obj']);
/** * 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)); }
/** * Do any setup before tests that rely on data in the database - i.e. create users/courses/classes/etc or import csvs. */ protected function set_up_tables() { $dataset = $this->createCsvDataSet(array(userset::TABLE => elispm::file('tests/fixtures/deepsight_userset.csv'))); $this->loadDataSet($dataset); }
/** * Test that modifying a Moodle user also updates the corresponding PM user. */ public function test_modifyingmoodleuserupdatespmuser() { global $CFG, $DB; require_once $CFG->dirroot . '/admin/tool/uploaduser/locallib.php'; $this->load_csv_data(); // Update a record. $src = new stdClass(); $src->id = 100; $src->firstname = 'Testuser'; $src->lastname = 'One'; $src->profile_field_sometext = 'boo'; $src->profile_field_sometextfrompm = 'bla'; $DB->update_record('user', $src); $mdluser = $DB->get_record('user', array('id' => 100)); $mcopy = clone $src; $mcopy = uu_pre_process_custom_profile_data($mcopy); profile_save_data($mcopy); events_trigger('user_updated', $mdluser); // Read the PM user and compare. $retr = new user(103, null, array(), false, array()); $retr->reset_custom_field_list(); $this->assertEquals($mdluser->firstname, $retr->firstname); $this->assertEquals($mdluser->lastname, $retr->lastname); // Check custom fields. $result = new PHPUnit_Extensions_Database_DataSet_DefaultDataSet(); $result->addTable(new moodle_recordset_phpunit_datatable(field_data_int::TABLE, $DB->get_recordset(field_data_int::TABLE, null, '', 'contextid, fieldid, data'))); $result->addTable(new moodle_recordset_phpunit_datatable(field_data_char::TABLE, $DB->get_recordset(field_data_char::TABLE, null, '', 'contextid, fieldid, data'))); $result->addTable(new moodle_recordset_phpunit_datatable(field_data_text::TABLE, $DB->get_recordset(field_data_text::TABLE, null, '', 'contextid, fieldid, data'))); $usercontext = \local_elisprogram\context\user::instance(103); $dataset = new PHPUnit_Extensions_Database_DataSet_CsvDataSet(); $dataset->addTable(field_data_int::TABLE, elispm::file('tests/fixtures/user_field_data_int.csv')); $dataset->addTable(field_data_char::TABLE, elispm::file('tests/fixtures/user_field_data_char.csv')); $dataset->addTable(field_data_text::TABLE, elispm::file('tests/fixtures/user_field_data_text.csv')); $dataset = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($dataset); $dataset->addFullReplacement('##USERCTXID##', $usercontext->id); $dataset->addFullReplacement('##USERCTXLVL##', CONTEXT_ELIS_USER); // Only the first text field should be changed; everything else should be the same. $dataset->addFullReplacement('First text entry field', $src->profile_field_sometext); $ret = $dataset->addFullReplacement('Second text entry field', $src->profile_field_sometextfrompm); $this->assertDataSetsEqual($dataset, $result); }
* * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * @package local_elisprogram * @author Remote-Learner.net Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2008-2013 Remote-Learner.net Inc (http://www.remote-learner.net) * */ /** * Page for bulk user actions. */ defined('MOODLE_INTERNAL') || die; require_once elispm::lib('selectionpage.class.php'); require_once elispm::file('form/bulkuserform.class.php'); require_once elispm::lib('data/user.class.php'); /* *** TBD *** require_once CURMAN_DIRLOCATION . '/lib/table.class.php'; require_once CURMAN_DIRLOCATION . '/lib/contexts.php'; *** */ /** * Bulk user action page. */ class bulkuserpage extends selectionpage { var $pagename = 'bulkuser'; var $section = 'admn'; var $form_class = 'bulkuserform'; static $contexts = array(); static function get_contexts($capability)
* @package local_elisprogram * @author Remote-Learner.net Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2008-2013 Remote Learner.net Inc http://www.remote-learner.net * */ defined('MOODLE_INTERNAL') || die; require_once elispm::lib('data/curriculum.class.php'); require_once elispm::lib('managementpage.class.php'); require_once elispm::lib('contexts.php'); require_once elispm::lib('datedelta.class.php'); require_once elispm::file('form/curriculumform.class.php'); require_once elispm::file('curriculumcoursepage.class.php'); require_once elispm::file('curriculumstudentpage.class.php'); require_once elispm::file('clustercurriculumpage.class.php'); require_once elispm::file('rolepage.class.php'); /// The main management page. class curriculumpage extends managementpage { var $pagename = 'cur'; var $section = 'curr'; var $data_class = 'curriculum'; var $form_class = 'cmCurriculaForm'; var $view_columns = array('name', 'description'); static $contexts = array(); static function get_contexts($capability) { if (!isset(curriculumpage::$contexts[$capability])) { global $USER; curriculumpage::$contexts[$capability] = get_contexts_by_capability_for_user('curriculum', $capability, $USER->id); }
/** * Set up data that is needed for testing * * @param boolean $setcustomfielddata Specify whether the userset's custom fields should be set * @param boolean $assignuser Specify whether the user should be directly assigned to the user set * @param boolean $setautoassociatefields Specity whether we should set up fields that allow userset autoassociation */ private function set_up_required_data($setcustomfielddata = true, $assignuser = true, $setautoassociatefields = false) { global $CFG, $DB; require_once $CFG->dirroot . '/local/elisprogram/lib/setup.php'; require_once elis::lib('data/customfield.class.php'); require_once elispm::file('accesslib.php'); require_once elispm::file('enrol/userset/moodleprofile/userset_profile.class.php'); require_once elispm::lib('data/clusterassignment.class.php'); require_once elispm::lib('data/user.class.php'); require_once elispm::lib('data/usermoodle.class.php'); require_once elispm::lib('data/userset.class.php'); $fieldcategoryid = $DB->get_field(field_category::TABLE, 'id', array('name' => 'Associated Group')); $this->assertNotEquals(false, $fieldcategoryid); $fieldcategory = new field_category($fieldcategoryid); $fieldcategory->load(); // Set up the test user. $user = new user(array('idnumber' => 'testuseridnumber', 'username' => 'testuserusername', 'firstname' => 'testuserfirstname', 'lastname' => 'testuserlastname', 'email' => '*****@*****.**', 'country' => 'CA')); $user->save(); $user->synchronize_moodle_user(); // We need a system-level role assignment. $roleid = create_role('systemrole', 'systemrole', 'systemrole'); $userid = $DB->get_field('user', 'id', array('username' => 'testuserusername')); $context = context_system::instance(); role_assign($roleid, $userid, $context->id); // Set up the userset. $userset = new userset(); $usersetdata = array('name' => 'testusersetname'); if ($setcustomfielddata) { $usersetdata['field_userset_group'] = 1; $usersetdata['field_userset_groupings'] = 1; } $userset->set_from_data((object) $usersetdata); $userset->save(); if ($setautoassociatefields) { // Set up a file we can use to auto-associate users to a userset. $field = new field(array('categoryid' => $fieldcategory->id, 'shortname' => 'autoassociate', 'name' => 'autoassociate', 'datatype' => 'bool')); $field->save(); // Ensure manual field owner exists for syncing. field_owner::ensure_field_owner_exists($field, 'manual'); $ownerid = $DB->get_field(field_owner::TABLE, 'id', array('fieldid' => $field->id, 'plugin' => 'manual')); $owner = new field_owner($ownerid); $owner->param_control = 'checkbox'; $owner->save(); field_owner::ensure_field_owner_exists($field, 'moodle_profile'); $DB->execute("UPDATE {" . field_owner::TABLE . "} SET exclude = ?", array(pm_moodle_profile::sync_to_moodle)); $fieldcontextlevel = new field_contextlevel(array('fieldid' => $field->id, 'contextlevel' => CONTEXT_ELIS_USER)); $fieldcontextlevel->save(); // The associated Moodle user profile field. require_once $CFG->dirroot . '/user/profile/definelib.php'; require_once $CFG->dirroot . '/user/profile/field/checkbox/define.class.php'; $profiledefinecheckbox = new profile_define_checkbox(); $data = new stdClass(); $data->datatype = 'checkbox'; $data->categoryid = 99999; $data->shortname = 'autoassociate'; $data->name = 'autoassociate'; $profiledefinecheckbox->define_save($data); $mfield = $DB->get_record('user_info_field', array('shortname' => 'autoassociate')); // The "cluster-profile" association. $usersetprofile = new userset_profile(array('clusterid' => $userset->id, 'fieldid' => $mfield->id, 'value' => 1)); $usersetprofile->save(); } if ($assignuser) { // Assign the user to the user set. $clusterassignment = new clusterassignment(array('clusterid' => $userset->id, 'userid' => $user->id, 'plugin' => 'manual')); $clusterassignment->save(); } }