/**
  * 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;
 }
Exemple #7
0
 /**
  * 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&section=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&section=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);
 }
Exemple #18
0
 * 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);
 }
Exemple #20
0
/**
 * 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;
}
Exemple #21
0
/**
 * 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);
 }
Exemple #27
0
 /**
  * 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);
 }
Exemple #28
0
 *
 * 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();
     }
 }