/**
     * Test can_delete_instance
     */
    public function test_can_delete_instance()
    {
        global $DB, $CFG;
        require_once $CFG->dirroot . '/enrol/uaims/lib.php';
        $this->resetAfterTest();
        // Create users to enrol.
        $user1 = $this->getDataGenerator()->create_user();
        $user2 = $this->getDataGenerator()->create_user();
        // User to use in IMS enrol.
        $user3 = $this->getDataGenerator()->create_user(array('idnumber' => 'testuser3'));
        $xmldoc = <<<DOC
<?xml version="1.0" encoding="utf-8"?>
<enterprise xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group recstatus="1"> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid>
<grouptype> <typevalue>Course</typevalue> </grouptype>
<description> <short>IDNUMBER</short> <long>Long description</long> </description>
<org /> <timeframe> <begin>1420441200</begin> <end>1431237600</end> </timeframe> <enrollcontrol />
<relationship> <sourcedid> <source>AIS</source> <id>UOFAB-TEST</id> </sourcedid> </relationship>
<extension> <settings> <setting>visible</setting> <value>0</value> </settings>
<settings> <setting>format</setting> <value>topics</value> </settings> </extension></group>
<membership> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid>
<member> <idtype>1</idtype> <sourcedid> <source>AIS</source> <id>testuser3</id> </sourcedid> <role recstatus="1" roletype="05">
<status>1</status> </role> </member> </membership></enterprise>
DOC;
        $category = new stdClass();
        $category->name = "test";
        $category->description = "UOFAB-TEST";
        $category->idnumber = "UOFAB-TEST";
        $category->timemodified = time();
        $DB->insert_record('course_categories', $category);
        $enrol = new enrol_uaims_plugin();
        // Make sure the course does not already exist.
        $course = $DB->get_record('course', array('idnumber' => "IDNUMBER"), $fields = '*', $strictness = IGNORE_MISSING);
        $this->assertEquals(false, $course);
        // Process the IMS Doc.
        $enrol->process_imsdoc($xmldoc);
        $course = $DB->get_record('course', array('idnumber' => "IDNUMBER"), $fields = '*', $strictness = MUST_EXIST);
        $manplugin = enrol_get_plugin('manual');
        $uaimsplugin = enrol_get_plugin('uaims');
        // Get the manager and teacher roles.
        $managerrole = $DB->get_record('role', array('shortname' => 'manager'));
        $this->assertNotEmpty($managerrole);
        $teacherrole = $DB->get_record('role', array('shortname' => 'teacher'));
        $this->assertNotEmpty($teacherrole);
        $maninstance1 = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual'), '*', MUST_EXIST);
        $uaimsinstance1 = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'uaims'), '*', MUST_EXIST);
        // Manually enrol users since the IMS plugin incorrectly assigns roles. CC does this as a separate process.
        $manplugin->enrol_user($maninstance1, $user1->id, $managerrole->id);
        $manplugin->enrol_user($maninstance1, $user2->id, $teacherrole->id);
        // Test that managers can delete the UAIM enrol method.
        $this->setUser($user1);
        $this->assertEquals(true, $uaimsplugin->can_delete_instance($uaimsinstance1));
        // Test that teachers can NOT delete the UAIM enrol method.
        $this->setUser($user2);
        $this->assertEquals(false, $uaimsplugin->can_delete_instance($uaimsinstance1));
    }
    /**
     * Test the case in which the course is created outside uaims (doesn't create a corresponding eclass_course_management
     * entry) then process_imsdoc is then called with rec=1 (new course), this should instead update the existing course.
     */
    public function test_process_course_created_outside_uaims_and_have_no_eclass_course_management_entry_ims_rec_1()
    {
        global $DB, $CFG;
        $this->resetAfterTest(true);
        $xmldoc = <<<DOC
<?xml version="1.0" encoding="utf-8"?>
<enterprise xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group recstatus="1"> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid>
<grouptype> <typevalue>Course</typevalue> </grouptype>
<description> <short>IDNUMBER</short> <long>Long description</long> </description>
<org /> <timeframe> <begin>1420106400</begin> <end>1420106410</end> </timeframe> <enrollcontrol />
<relationship> <sourcedid> <source>AIS</source> <id>UOFAB-TEST</id> </sourcedid> </relationship>
<extension> <settings> <setting>visible</setting> <value>0</value> </settings>
<settings> <setting>format</setting> <value>topics</value> </settings> </extension>  </group></enterprise>
DOC;
        // Dummy category.
        $category = new stdClass();
        $category->name = "test";
        $category->description = "UOFAB-TEST";
        $category->idnumber = "UOFAB-TEST";
        $category->timemodified = time();
        $category->id = $DB->insert_record('course_categories', $category);
        // Dummy course.
        $course = new stdClass();
        $course->category = $category->id;
        $course->sortorder = 0;
        $course->fullname = "Long description";
        $course->shortname = "IDNUMBER-HARPER-SEAL-IS-THE-DOGEST-SPECIES";
        $course->idnumber = "IDNUMBER";
        $course->summary = "summaryformat";
        $course->showgrades = 1;
        $course->format = 'topics';
        $course->visible = 0;
        $course->timecreated = time();
        $course->startdate = time();
        $course->sortorder = 0;
        $course->timemodified = 0;
        $course->id = $DB->insert_record('course', $course);
        // Process missing end date.
        $enrol = new enrol_uaims_plugin();
        $enrol->process_imsdoc($xmldoc);
        // Confirm that a corresponding eclass_course_management entry is created.
        $coursemanagementexist = $DB->get_record('eclass_course_management', array('courseid' => $course->id), $fields = 'id', $strictness = IGNORE_MISSING) != false;
        // Although rec=1 means insert, this will default to update in the case of
        // course create outside uaims. Thus, other values in $xmldoc should update the course.
        $updatedcourse = $DB->get_record('course', array('id' => $course->id));
        $this->assertEquals('IDNUMBER', $updatedcourse->shortname);
        $this->assertEquals('Long description', $updatedcourse->fullname);
        $this->assertEquals('IDNUMBER', $updatedcourse->idnumber);
        $this->assertTrue($coursemanagementexist);
    }
 public function test_enrol_uaims_cron()
 {
     global $DB, $CFG;
     $this->resetAfterTest(true);
     // Run the cron on whatever data is in the database.
     // This checks that cron won't crash if the table is missing.
     $eup = new enrol_uaims_plugin();
     $eup->set_config('enableautocourseopenclose', 1);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $dbtables = $DB->get_tables(false);
     $this->assertEquals(true, array_key_exists('eclass_course_management', $dbtables));
     $ecmt = new eclass_course_manager_test();
     $eergisteren = time() - 2 * 86400;
     $gisteren = time() - 86400;
     $morgen = time() + 86400;
     $overmorgen = time() + 2 * 86400;
     // Course names are appended with Start, Now, and End, in chronological order.
     $coursense = $ecmt->create_course_vis_start_end(0, $morgen, $overmorgen);
     $coursesne = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen);
     $coursesen = $ecmt->create_course_vis_start_end(0, $eergisteren, $gisteren);
     $coursenes = $ecmt->create_course_vis_start_end(0, $overmorgen, $morgen);
     $courseens = $ecmt->create_course_vis_start_end(1, $morgen, $gisteren);
     $courseesn = $ecmt->create_course_vis_start_end(0, $gisteren, $eergisteren);
     $courseopendone = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen, time() - 86000);
     $courseclosedone = $ecmt->create_course_vis_start_end(1, $eergisteren, $gisteren, null, time() - 86000);
     // Disable auto open/close.  Visibility and times should stay unchanged.
     $eup->set_config('enableautocourseopenclose', 0);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesne->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseens->id, 1, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true);
     $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, true, false);
     // Enable auto open/close.  Visibility and times should change selectively.
     $eup->set_config('enableautocourseopenclose', 1);
     // Output buffering is disabled in phpunit runs.
     ini_set('output_buffering', 'On');
     ob_start();
     $eup->cron();
     ob_end_clean();
     ini_set('output_buffering', 'Off');
     $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($coursesne->id, 1, false, true);
     $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, false, false);
     $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true);
     $ecmt->check_courseid_vis_opened_closed($courseens->id, 0, true, false);
     $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, false, false);
     $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true);
     $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, false, false);
 }
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle 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 Moodle.  If not, see <http://www.gnu.org/licenses/>.
/**
 *
 *
 * @version $Id$
 * @copyright 2011
 */
require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
$site = get_site();
global $CFG, $DB;
require_once 'lib.php';
$enrol = new enrol_uaims_plugin();
if (md5($_POST['imsdoc'] . $_POST['timestamp'] . $CFG->uaimssecret) == $_POST['mac']) {
    $enrol->process_imsdoc($_POST['imsdoc']);
} else {
    echo 'Invalid Mac.';
}