MDL-22787 Initial structures for the new MNet enrolment plugin
authorDavid Mudrak <david.mudrak@gmail.com>
Sat, 17 Jul 2010 22:16:48 +0000 (22:16 +0000)
committerDavid Mudrak <david.mudrak@gmail.com>
Sat, 17 Jul 2010 22:16:48 +0000 (22:16 +0000)
enrol/mnet/allowed_courses.php [deleted file]
enrol/mnet/config.html [deleted file]
enrol/mnet/db/access.php [new file with mode: 0644]
enrol/mnet/db/mnet.php [deleted file]
enrol/mnet/enrol.php [deleted file]
enrol/mnet/lang/en/enrol_mnet.php
enrol/mnet/lib.php [new file with mode: 0644]
enrol/mnet/settings.php [new file with mode: 0644]
enrol/mnet/version.php

diff --git a/enrol/mnet/allowed_courses.php b/enrol/mnet/allowed_courses.php
deleted file mode 100644 (file)
index 7711381..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-
-/*
- * Created on 12/12/2006
- *
- * MNET enrol allowed courses and categories form
- */
-
-require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
-require_once $CFG->libdir . '/adminlib.php';
-include_once $CFG->dirroot . '/mnet/lib.php';
-
-
-admin_externalpage_setup('ssoaccesscontrol');
-echo $OUTPUT->header();
-
-$addcategory    = optional_param('addcategory', 0, PARAM_BOOL);
-$removecategory = optional_param('removecategory', 0, PARAM_BOOL);
-$addcourse      = optional_param('addcourse', 0, PARAM_BOOL);
-$removecourse   = optional_param('removecourse', 0, PARAM_BOOL);
-
-$sitecontext = get_context_instance(CONTEXT_SYSTEM);
-$sesskey = sesskey();
-$formerror = array();
-
-require_capability('moodle/user:delete', $sitecontext);
-
-// process returned form data
-if ($form = data_submitted() and confirm_sesskey()) {
-
-    // add and remove categories as needed
-    if (!empty($CFG->enrol_mnet_allowed_categories)) {
-        $allowedcategories = explode(',', $CFG->enrol_mnet_allowed_categories);
-    }
-    if ($addcategory and !empty($form->addcategories)) {
-        foreach ($form->addcategories as $category) {
-            if (!$category = clean_param($category, PARAM_INT)) {
-                continue;
-            }
-            $allowedcategories[] = $category;
-        }
-    }
-    if ($removecategory and !empty($form->removecategories)) {
-        foreach ($form->removecategories as $category) {
-            if ($category = clean_param($category, PARAM_INT)) {
-                $removedcategories[] = $category;
-            }
-        }
-        $allowedcategories = array_diff($allowedcategories, $removedcategories);
-    }
-
-    // add and remove courses as needed
-    if (!empty($CFG->enrol_mnet_allowed_courses)) {
-        $allowedcourses = explode(',', $CFG->enrol_mnet_allowed_courses);
-    }
-    if ($addcourse and !empty($form->addcourses)) {
-        foreach ($form->addcourses as $course) {
-            if ($course = clean_param($course, PARAM_INT)) {
-                $allowedcourses[] = $course;
-            }
-        }
-    }
-    if ($removecourse and !empty($form->removecourses)) {
-        foreach ($form->removecourses as $course) {
-            if (!$course = clean_param($course, PARAM_INT)) {
-                continue;
-            }
-            $removedcourses[] = $course;
-        }
-        $allowedcourses = array_diff($allowedcourses, $removedcourses);
-    }
-
-    // save config
-    $cfg = empty($allowedcategories) ? '' : implode(',', $allowedcategories);
-    set_config('enrol_mnet_allowed_categories', $cfg);
-    $cfg = empty($allowedcourses) ? '' : implode(',', $allowedcourses);
-    set_config('enrol_mnet_allowed_courses', $cfg);
-
-    // redirect('allowed_courses.php', get_string('changessaved'));
-}
-
-
-
-// setup arrays for allowed categories and courses
-$categories = array();
-if ($categories = $DB->get_records('course_categories', null, 'name', 'id, name')) {
-    $allowedcategories = array();
-    if (empty($CFG->enrol_mnet_allowed_categories)) {
-        $potentialcategories = $categories;
-    } else {
-        $potentialcategories = array();
-        $explode_categories = explode(',', $CFG->enrol_mnet_allowed_categories);
-        foreach($categories as $category) {
-            if (in_array($category->id, $explode_categories)) {
-                $allowedcategories[] = $category;
-            } else {
-                $potentialcategories[] = $category;
-            }
-        }
-    }
-}
-$courses = array();
-if ($courses = $DB->get_records('course', null, 'shortname', 'id, shortname')) {
-    unset($courses[SITEID]); // never list or offer the siteid
-    $allowedcourses = array();
-    if (empty($CFG->enrol_mnet_allowed_courses)) {
-        $potentialcourses = $courses;
-    } else {
-        $potentialcourses = array();
-        $explode_courses = explode(',', $CFG->enrol_mnet_allowed_courses);
-        foreach($courses as $course) {
-            if (in_array($course->id, $explode_courses)) {
-                $allowedcourses[] = $course;
-            } else {
-                $potentialcourses[] = $course;
-            }
-        }
-    }
-}
-
-
-
-// output the form
-echo $OUTPUT->box_start();
-
-?>
- <div class="allowedcoursesdiv">
-  <form id="allowedcoursesform" method="post">
-    <input type="hidden" name="sesskey" value="<?php echo $sesskey; ?>" />
-<?php
-
-// display course category selector
-if (count($categories) < 1) {
-    echo get_string('nocategoriesdefined', 'enrol_mnet', "$CFG->wwwroot/course/index.php?categoryedit=on");
-} else {
-
-?>
-   <table align="center" border="0" cellpadding="5" cellspacing="0">
-    <tr>
-      <td valign="top">
-          <?php print_string('allowedcategories', 'enrol_mnet', count($allowedcategories)); ?>
-      </td>
-      <td></td>
-      <td valign="top">
-          <?php print_string('allcategories', 'enrol_mnet', count($potentialcategories)); ?>
-      </td>
-    </tr>
-
-    <tr>
-      <td valign="top">
-          <select name="removecategories[]" size="20" id="removecategories" multiple="multiple"
-                  onfocus="getElementById('allowedcoursesform').addcategory.disabled=true;
-                           getElementById('allowedcoursesform').removecategory.disabled=false;
-                           getElementById('allowedcoursesform').addcategories.selectedIndex=-1;" >
-          <?php
-              foreach ($allowedcategories as $category) {
-                  echo "<option value=\"$category->id\"> " . format_string($category->name) . " </option>\n";
-              }
-          ?>
-          </select>
-      </td>
-
-      <td valign="top">
-        <br />
-        <input name="addcategory" type="submit" id="add" value="&larr;" />
-        <br />
-        <input name="removecategory" type="submit" id="remove" value="&rarr;" />
-        <br />
-      </td>
-
-      <td valign="top">
-          <select name="addcategories[]" size="20" id="addcategories" multiple="multiple"
-                  onFocus="getElementById('allowedcoursesform').addcategory.disabled=false;
-                           getElementById('allowedcoursesform').removecategory.disabled=true;
-                           getElementById('allowedcoursesform').removecategories.selectedIndex=-1;">
-          <?php
-            foreach ($potentialcategories as $category) {
-                echo "<option value=\"$category->id\"> " . format_string($category->name) . " </option>\n";
-            }
-        ?>
-        </select>
-       </td>
-    </tr>
-   </table>
-<?php
-
-}
-
-// display course selector
-if (count($courses) < 1) {
-    echo get_string('nocoursesdefined', 'enrol_mnet', "TODO: $course_admin_url"); // TODO
-} else {
-
-?>
-   <table align="center" border="0" cellpadding="5" cellspacing="0">
-    <tr>
-      <td valign="top">
-          <?php print_string('allowedcourses', 'enrol_mnet', count($allowedcourses)); ?>
-      </td>
-      <td></td>
-      <td valign="top">
-          <?php print_string('allcourses', 'enrol_mnet', count($potentialcourses)); ?>
-      </td>
-    </tr>
-
-    <tr>
-      <td valign="top">
-          <select name="removecourses[]" size="20" id="removecourses" multiple="multiple"
-                  onFocus="getElementById('allowedcoursesform').addcourse.disabled=true;
-                           getElementById('allowedcoursesform').removecourse.disabled=false;
-                           getElementById('allowedcoursesform').addcourses.selectedIndex=-1;">
-          <?php
-              foreach ($allowedcourses as $course) {
-                  echo "<option value=\"$course->id\"> " . format_string($course->shortname) . " </option>\n";
-              }
-          ?>
-          </select>
-      </td>
-
-      <td valign="top">
-        <br />
-        <input name="addcourse" type="submit" id="add" value="&larr;" />
-        <br />
-        <input name="removecourse" type="submit" id="remove" value="&rarr;" />
-        <br />
-      </td>
-
-      <td valign="top">
-          <select name="addcourses[]" size="20" id="addcourses" multiple="multiple"
-                  onFocus="getElementById('allowedcoursesform').addcourse.disabled=false;
-                           getElementById('allowedcoursesform').removecourse.disabled=true;
-                           getElementById('allowedcoursesform').removecourses.selectedIndex=-1;">
-          <?php
-            foreach ($potentialcourses as $course) {
-                echo "<option value=\"$course->id\"> " . format_string($course->shortname) . " </option>\n";
-            }
-        ?>
-        </select>
-       </td>
-    </tr>
-   </table>
-<?php
-
-}
-
-?>
-   </form>
-  </div>
-<?php
-
-echo $OUTPUT->box_end();
-echo $OUTPUT->footer();
-
-?>
diff --git a/enrol/mnet/config.html b/enrol/mnet/config.html
deleted file mode 100644 (file)
index b60e6fe..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-if (empty($CFG->mnet_dispatcher_mode) || $CFG->mnet_dispatcher_mode !== 'strict') {
-    echo $OUTPUT->box(get_string('mnetdisabled','mnet'));
-}
-
-$servercount = 0;
-if (is_array($mnethosts)) {
-    $servercount = count(array_keys($mnethosts));
-}
-
-?>
-<table cellspacing="0" cellpadding="5" border="0" class="boxaligncenter">
-
-<tr valign="top">
-    <th align="center" colspan="3"><?php print_string('mnetlocalforexternal','enrol_mnet'); ?>:</th>
-</tr>
-
-<tr valign="top">
-    <td align="right">allow_allcourses:</td>
-    <td>
-    <?php echo html_writer::select_yes_no('enrol_mnet_allow_allcourses', $frm->enrol_mnet_allow_allcourses); ?>
-    </td>
-    <td>
-    <?php  print_string("allow_allcourses", "enrol_mnet") ?>
-    </td>
-</tr>
-
-<tr>
-  <td align="right">allowed_courses:</td>
-  <td>
-   <a href="<?php echo "$CFG->wwwroot/enrol/mnet/allowed_courses.php" ?>"><?php print_string('allowedcourseslinktext', 'enrol_mnet') ?></a>
-  </td>
-</tr>
-
-
-</table>
diff --git a/enrol/mnet/db/access.php b/enrol/mnet/db/access.php
new file mode 100644 (file)
index 0000000..96c9cf6
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+
+// 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/>.
+
+/**
+ * Capabilities for MNet enrolment plugin
+ *
+ * @package    enrol
+ * @subpackage mnet
+ * @copyright  2010 David Mudrak <david@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+$capabilities = array(
+    // configure the mnet plugin settings in the course
+    // users with this capability open the course for the remote users
+    'enrol/mnet:config' => array(
+        'captype' => 'write',
+        'contextlevel' => CONTEXT_COURSE,
+        'legacy' => array(
+            'manager' => CAP_ALLOW,
+        )
+    ),
+);
diff --git a/enrol/mnet/db/mnet.php b/enrol/mnet/db/mnet.php
deleted file mode 100644 (file)
index bc7a4d4..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-// 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/>.
-
-
-/**
- * This file contains the mnet services for the mnet enrolment plugin
- *
- * @since 2.0
- * @package moodlecore
- * @subpackage enrolment
- * @copyright 2010 Penny Leach
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
-
-$publishes = array(
-    'mnet_enrol' => array(
-        'apiversion' => 1,
-        'classname'  => 'enrolment_plugin_mnet',
-        'filename'   => 'enrol.php',
-        'methods'    => array(
-            'available_courses',
-            'user_enrolments',
-            'enrol_user',
-            'unenrol_user',
-            'course_enrolments'
-        ),
-    ),
-);
-$subscribes = array(
-    'mnet_enrol' => array(
-        'available_courses' => 'enrol/mnet/enrol.php/available_courses',
-        'user_enrolments'   => 'enrol/mnet/enrol.php/user_enrolments',
-        'enrol_user'        => 'enrol/mnet/enrol.php/enrol_user',
-        'unenrol_user'      => 'enrol/mnet/enrol.php/unenrol_user',
-        'course_enrolments' => 'enrol/mnet/enrol.php/course_enrolments',
-    ),
-);
diff --git a/enrol/mnet/enrol.php b/enrol/mnet/enrol.php
deleted file mode 100644 (file)
index 6816712..0000000
+++ /dev/null
@@ -1,582 +0,0 @@
-<?php
-// The following flags are set in the configuration
-// $config->allow_allcourses:       expose all courses to external enrolment
-// $config->allowed_categories:     serialised array of courses allowed
-// $config->allowed_courses:        serialised array of courses allowed
-
-class enrolment_plugin_mnet {
-
-    /** * mnet environment - constructor makes sure its set up */
-    private $mnet;
-
-    function __construct() {
-        $this->mnet = get_mnet_environment();
-    }
-
-    /// Override the base config_form() function
-    function config_form($frm) {
-        global $CFG, $OUTPUT, $PAGE;
-
-       $vars = array('enrol_mnet_allow_allcourses',
-                     'enrol_mnet_allowed_categories',
-                     'enrol_mnet_allowed_courses');
-
-        foreach ($vars as $var) {
-            if (!isset($frm->$var)) {
-                $frm->$var = '';
-            }
-        }
-
-        $mnethosts = $this->list_remote_servers();
-
-        include ("$CFG->dirroot/enrol/mnet/config.html");
-    }
-
-
-    /// Override the base process_config() function
-    function process_config($config) {
-
-        if (!isset($config->enrol_mnet_allow_allcourses)) {
-            $config->enrol_mnet_allow_allcourses = false;
-        }
-        set_config('enrol_mnet_allow_allcourses', $config->enrol_mnet_allow_allcourses);
-
-        if (!isset($config->enrol_mnet_allowed_categories)) {
-            $config->enrol_mnet_allowed_categories = '';
-        }
-        set_config('enrol_mnet_allowed_categories', $config->enrol_mnet_allowed_categories);
-
-        if (!isset($config->enrol_mnet_allowed_courses)) {
-            $config->enrol_mnet_allowed_courses = '';
-        }
-        set_config('enrol_mnet_allowed_courses', $config->enrol_mnet_allowed_courses);
-
-        return true;
-
-    }
-
-    /// Override the get_access_icons() function
-    function get_access_icons($course) {
-    }
-
-    /**
-     * Override the base cron() function
-     */
-    //function cron() {
-    //
-    //} // end of cron()
-
-
-
-    /***
-     *** MNET functions
-     ***
-     ***/
-
-    /**
-    * Returns a list of all courses available for remote login
-    *
-    * @return array Array of courses
-    */
-    function available_courses() {
-        global $CFG, $DB;
-
-        if (!empty($CFG->enrol_mnet_allow_allcourses)) {
-
-            $query =
-            "SELECT
-                co.id          AS remoteid,
-                ca.id          AS cat_id,
-                ca.name        AS cat_name,
-                ca.description AS cat_description,
-                co.sortorder,
-                co.fullname,
-                co.shortname,
-                co.idnumber,
-                co.summary,
-                co.startdate,
-                co.cost,
-                co.currency,
-                co.defaultrole AS defaultroleid,
-                r.name         AS defaultrolename
-            FROM
-                {course_categories} ca
-            JOIN
-                {course} co ON ca.id = co.category
-            LEFT JOIN
-                {role} r ON r.id = co.defaultrole
-            WHERE
-                co.visible = 1 AND
-                co.enrollable = 1
-            ORDER BY
-                sortorder ASC
-                ";
-
-            return $DB->get_records_sql($query);
-
-        } elseif (!empty($CFG->enrol_mnet_allowed_categories)) {
-
-            $cats = preg_split('/\s*,\s*/', $CFG->enrol_mnet_allowed_categories);
-            for ($n=0;$n < count($cats); $n++) {
-                $cats[$n] = " ca.path LIKE '%/" . (int)$cats[$n] . "/%' ";
-            }
-            $cats = join(' OR ', $cats);
-
-            $query =
-            "SELECT
-                id, name
-            FROM
-                {course_categories} ca
-            WHERE
-                ca.id IN ({$CFG->enrol_mnet_allowed_categories})
-                OR ( $cats )
-            ORDER BY
-                path ASC,
-                depth ASC
-                ";
-            unset($cats);
-
-            $rs = $DB->get_records_sql($query);
-
-            if (!empty($rs)) {
-                $cats = array_keys($rs);
-            }
-            $where = ' AND ( ca.id IN (' . join(',', $cats) . ') ';
-
-
-            if (!empty($CFG->enrol_mnet_allowed_courses)) {
-                $where .=  " OR co.id in ({$CFG->enrol_mnet_allowed_courses}) ";
-            }
-
-            $where .= ')';
-
-            $query =
-            "SELECT
-                co.id as remoteid,
-                ca.id as cat_id,
-                ca.name as cat_name,
-                ca.description as cat_description,
-                co.sortorder,
-                co.fullname,
-                co.shortname,
-                co.idnumber,
-                co.summary,
-                co.startdate,
-                co.cost,
-                co.currency,
-                co.defaultrole as defaultroleid,
-                r.name
-            FROM
-                {course_categories} ca
-            JOIN
-                {course} co ON ca.id = co.category
-            LEFT JOIN
-                {role} r ON r.id = co.defaultrole
-            WHERE
-                co.visible = 1 AND
-                co.enrollable = 1 $where
-            ORDER BY
-                sortorder ASC
-                ";
-
-            return $DB->get_records_sql($query);
-
-        } elseif (!empty($CFG->enrol_mnet_allowed_courses)) {
-
-            $query =
-                "SELECT
-                    co.id as remoteid,
-                    ca.id as cat_id,
-                    ca.name as cat_name,
-                    ca.description as cat_description,
-                    co.sortorder,
-                    co.fullname,
-                    co.shortname,
-                    co.idnumber,
-                    co.summary,
-                    co.startdate,
-                    co.cost,
-                    co.currency,
-                    co.defaultrole as defaultroleid,
-                    r.name
-                FROM
-                    {course_categories} ca
-                JOIN
-                    {course} co ON ca.id = co.category
-                LEFT JOIN
-                    {role} r ON r.id = co.defaultrole
-                WHERE
-                    co.visible = 1 AND
-                    co.enrollable = 1 AND
-                    co.id IN ({$CFG->enrol_mnet_allowed_courses})
-                ORDER BY
-                    sortorder ASC
-                    ";
-
-            return $DB->get_records_sql($query);
-
-        }
-
-        return array();
-    }
-
-    /**
-     *
-     */
-    function user_enrolments($userid) {
-        return array();
-    }
-
-    /**
-     * Get a list of users from the client server who are enrolled in a course
-     *
-     * @param   int     $courseid   The Course ID
-     * @param   string  $roles      Comma-separated list of role shortnames
-     * @return  array               Array of usernames who are homed on the
-     *                              client machine
-     */
-    function course_enrolments($courseid, $roles = '') {
-        global $CFG, $DB;
-
-        if (! $course = $DB->get_record('course', array('id'=>$courseid))) {
-            return 'no course';
-            //error("That's an invalid course id");
-        }
-
-        $remoteclient = get_mnet_remote_client();
-
-        $context = get_context_instance(CONTEXT_COURSE, $courseid);
-
-        $sql = "
-                SELECT
-                    u.id,
-                    u.username,
-                    a.enrol,
-                    a.timemodified,
-                    r.name,
-                    r.shortname
-                FROM
-                    {role_assignments} a,
-                    {role} r,
-                    {user} u
-                WHERE
-                    a.contextid = {$context->id} AND
-                    a.roleid = r.id AND
-                    a.userid = u.id AND
-                    u.mnethostid = '{$remoteclient->id}'
-                    ";
-
-        if(!empty($roles)) {
-            // $default_role = get_default_course_role($course); ???
-            $sql .= " AND
-                    a.roleid in ('".str_replace(',',  "', '",  $roles)."')";
-        }
-
-        $enrolments = $DB->get_records_sql($sql);
-
-        $returnarray = array();
-        foreach($enrolments as $user) {
-            $returnarray[$user->username] = array('enrol' => $user->enrol,
-                                                  'timemodified' => $user->timemodified,
-                                                  'shortname' => $user->shortname,
-                                                  'username' => $user->username,
-                                                  'name' => $user->name);
-        }
-        return $returnarray;
-    }
-
-    /**
-    * Enrols user to course with the default role
-    *
-    * @param string $username   The username of the remote use
-    * @param int    $courseid   The id of the local course
-    * @return bool              Whether the enrolment has been successful
-    */
-    function enrol_user($user, $courseid) {
-        global $DB;
-        $remoteclient = get_mnet_remote_client();
-
-        $userrecord = $DB->get_record('user',array('username'=>$user['username'], 'mnethostid'=>$remoteclient->id));
-
-        if ($userrecord == false) {
-            $userrecord = mnet_strip_user((object)$user, mnet_fields_to_import($remoteclient));
-            /* there used to be a setting in auth_mnet called auto_add_remote_users
-             * which we should have been checking here (but weren't).
-             * this setting has now been removed. See MDL-21327
-             */
-            $userrecord->mnethostid = $remoteclient->id;
-
-            if ($userrecord->id = $DB->insert_record('user', $userrecord)) {
-                $userrecord = $DB->get_record('user', array('id'=>$userrecord->id));
-            } else {
-                throw new mnet_server_exception(5011, 'couldnotcreateuser', 'enrol_mnet');
-            }
-        }
-
-        if (! $course = $DB->get_record('course', array('id'=>$courseid))) {
-            throw new mnet_server_exception(5012, 'coursenotfound', 'enrol_mnet');
-        }
-
-        $courses = $this->available_courses();
-
-        if (!empty($courses[$courseid])) {
-            if (enrol_into_course($course, $userrecord, 'mnet')) {
-                return true;
-            }
-            throw new mnet_server_exception(5016, 'couldnotenrol', 'enrol_mnet');
-        }
-        throw new mnet_server_exception(5013, 'courseunavailable', 'enrol_mnet');
-    }
-
-    /**
-    * Unenrol a user from a course
-    *
-    * @param string $username   The username
-    * @param int    $courseid   The id of the local course
-    * @return bool              Whether the user can login from the remote host
-    */
-    function unenrol_user($username, $courseid) {
-        global $DB;
-        $remoteclient = get_mnet_remote_client();
-
-        if (!$userrecord = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$remoteclient->id))) {
-            throw new mnet_exception(5014, 'usernotfound', 'enrol_mnet');
-        }
-
-        if (! $course = $DB->get_record('course', array('id'=>$courseid))) {
-            throw new mnet_server_exception(5012, 'coursenotfound', 'enrol_mnet');
-        }
-
-        $context = get_context_instance(CONTEXT_COURSE, $course->id);
-
-        // Are we a *real* user or the shady MNET Daemon?
-        // require_capability('moodle/role:assign', $context, NULL, false);
-
-        role_unassign_all(array('userid'=>$userrecord->id, 'contextiod'=>$context->id, 'component'=>'enrol_mnet'), true, true);
-
-        return true;
-    }
-
-    /***
-     *** Client RPC behaviour
-     ***
-     ***
-     ***/
-
-    /**
-    * Lists remote servers we use 'enrol' services from.
-    *
-    * @return array
-    */
-    function list_remote_servers() {
-        global $CFG, $DB;
-
-        $sql = "
-            SELECT DISTINCT
-                h.id,
-                h.name
-            FROM
-                {mnet_host} h,
-                {mnet_host2service} h2s,
-                {mnet_service} s
-            WHERE
-                h.id          = h2s.hostid   AND
-                h2s.serviceid = s.id         AND
-                s.name        = 'mnet_enrol' AND
-                h2s.subscribe = 1";
-
-        $res = $DB->get_records_sql($sql);
-        if (is_array($res)) {
-            return $res;
-        } else {
-            return array();
-        }
-    }
-
-    /**
-    * Does Foo
-    *
-    * @param int    $mnethostid The id of the remote mnethost
-    * @return array              Whether the user can login from the remote host
-    */
-    function fetch_remote_courses($mnethostid) {
-        global $CFG, $USER, $DB;
-        require_once $CFG->dirroot . '/mnet/xmlrpc/client.php';
-
-        // get the Service Provider info
-        $mnet_sp = new mnet_peer();
-        $mnet_sp->set_id($mnethostid);
-
-        // set up the RPC request
-        $mnetrequest = new mnet_xmlrpc_client();
-        $mnetrequest->set_method('enrol/mnet/enrol.php/available_courses');
-
-        // Initialise $message
-        $message = '';
-
-        // TODO: cache for a while (10 minutes?)
-
-        // Thunderbirds are go! Do RPC call and store response
-        if ($mnetrequest->send($mnet_sp) === true) {
-            $courses = $mnetrequest->response;
-
-            // get the cached courses key'd on remote id - only need remoteid and id fields
-            $cachedcourses = $DB->get_records('mnet_enrol_course', array('hostid'=>$mnethostid), 'remoteid', 'remoteid, id' );
-
-            // Update cache and transform $courses into objects
-            // in-place for the benefit of our caller...
-            for ($n=0;$n<count($courses);$n++) {
-
-                $course = &$courses[$n];
-
-                // add/update cached data in mnet_enrol_courses
-                // sanitise data
-                $course = (object)$course;
-                $course->remoteid        = (int)$course->remoteid;
-                $course->hostid          = $mnethostid;
-                $course->cat_id          = (int)$course->cat_id;
-                $course->sortorder       = (int)$course->sortorder ;
-                $course->startdate       = (int)$course->startdate;
-                $course->cost            = (int)$course->cost;
-                $course->defaultroleid   = (int)$course->defaultroleid;
-
-                // sanitise strings for DB NOTE - these are not sane
-                // for printing, so we'll use a different object
-                $dbcourse = clone($course);
-                $dbcourse->cat_name        = substr($dbcourse->cat_name,0,255);
-                $dbcourse->cat_description = $dbcourse->cat_description;
-                $dbcourse->fullname        = substr($dbcourse->fullname,0,254);
-                $dbcourse->shortname       = substr($dbcourse->shortname,0,15);
-                $dbcourse->idnumber        = substr($dbcourse->idnumber,0,100);
-                $dbcourse->summary         = $dbcourse->summary;
-                $dbcourse->currency        = substr($dbcourse->currency,0,3);
-                $dbcourse->defaultrolename = substr($dbcourse->defaultrolename,0,255);
-
-                // insert or update
-                if (empty($cachedcourses[$course->remoteid])) {
-                    $course->id = $DB->insert_record('mnet_enrol_course', $dbcourse);
-                } else {
-                    $course->id = $dbcourse->id = $cachedcourses[$course->remoteid]->id;
-                    $cachedcourses[$course->remoteid]->seen=true;
-                    $DB->update_record('mnet_enrol_course', $dbcourse);
-                }
-                // free tmp obj
-                unset($dbcourse);
-            }
-
-            // prune stale data from cache
-            if (!empty($cachedcourses)) {
-                $stale = array();
-                foreach ($cachedcourses as $id => $cc) {
-                    // TODO: maybe set a deleted flag instead
-                    if (empty($cc->seen)) {
-                        $stale[] = $cc->id;
-                    }
-                }
-                if (!empty($stale)) {
-                    $DB->delete_records_select('mnet_enrol_course', 'id IN ('.join(',',$stale).')');
-                }
-            }
-
-            return $courses;
-        } else {
-            foreach ($mnetrequest->error as $errormessage) {
-                list($code, $errormessage) = array_map('trim',explode(':', $errormessage, 2));
-                $message .= "ERROR $code:<br/>$errormessage<br/>";
-            }
-            print_error("rpcerror", '', '', $message);
-        }
-        return false;
-    }
-
-    /**
-    * Does Foo
-    *
-    * @param int    $mnethostid The id of the remote mnethost
-    * @return array              Whether the user can login from the remote host
-    */
-    function req_enrol_user($userid, $courseid) {
-        global $CFG, $USER, $DB;
-        require_once $CFG->dirroot . '/mnet/xmlrpc/client.php';
-
-        // Prepare a user record
-        // in case the remote host doesn't have it
-        $user = $DB->get_record('user', array('id'=>$userid));
-        $user = (array)$user;
-
-        $course = $DB->get_record('mnet_enrol_course', array('id'=>$courseid));
-
-        // get the Service Provider info
-        $mnet_sp = new mnet_peer();
-        $mnet_sp->set_id($course->hostid);
-
-        // set up the RPC request
-        $mnetrequest = new mnet_xmlrpc_client();
-        $mnetrequest->set_method('enrol/mnet/enrol.php/enrol_user');
-        $mnetrequest->add_param(mnet_strip_user($user, mnet_fields_to_send($mnet_sp)));
-        $mnetrequest->add_param($course->remoteid);
-
-        // Thunderbirds are go! Do RPC call and store response
-        if ($mnetrequest->send($mnet_sp) === true) {
-            if ($mnetrequest->response == true) {
-                // now store it in the mnet_enrol_assignments table
-                $assignment = new StdClass;
-                $assignment->userid = $userid;
-                $assignment->hostid = $course->hostid;
-                $assignment->courseid = $course->id;
-                $assignment->enroltype = 'mnet';
-                // TODO: other fields
-                if ($DB->insert_record('mnet_enrol_assignments', $assignment)) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-    * Does Foo
-    *
-    * @param int    $mnethostid The id of the remote mnethost
-    * @return array              Whether the user can login from the remote host
-    */
-    function req_unenrol_user($userid, $courseid) {
-        global $CFG, $USER, $DB;
-        require_once $CFG->dirroot . '/mnet/xmlrpc/client.php';
-
-        // in case the remote host doesn't have it
-        $username = $DB->get_field('user', 'username', array('id'=>$userid));
-
-        $course = $DB->get_record('mnet_enrol_course', array('id'=>$courseid));
-
-        // get the Service Provider info
-        $mnet_sp = new mnet_peer();
-        $mnet_sp->set_id($course->hostid);
-
-        // set up the RPC request
-        $mnetrequest = new mnet_xmlrpc_client();
-        $mnetrequest->set_method('enrol/mnet/enrol.php/unenrol_user');
-        $mnetrequest->add_param($username);
-        $mnetrequest->add_param($course->remoteid);
-
-        // TODO - prevent removal of enrolments that are not of
-        // type mnet...
-
-
-        // Thunderbirds are go! Do RPC call and store response
-        if ($mnetrequest->send($mnet_sp) === true) {
-            if ($mnetrequest->response == true) {
-                // remove enrolment cached in mnet_enrol_assignments
-                $DB->delete_records_select('mnet_enrol_assignments',
-                                      "userid=? AND courseid=?", array($userid, $course->id));
-
-                return true;
-            }
-        }
-        return false;
-    }
-
-} // end of class
-
-
index 05330ce..0d6c93d 100644 (file)
 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 
 /**
- * Strings for component 'enrol_mnet', language 'en', branch 'MOODLE_20_STABLE'
+ * English strings for MNet enrolment plugin
  *
- * @package   enrol_mnet
- * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
- * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @package    enrol
+ * @subpackage mnet
+ * @copyright  2010 David Mudrak <david@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
 
-$string['allcategories'] = '{$a} potential categories';
-$string['allcourses'] = '{$a} potential courses';
-$string['allow_allcourses'] = 'Allow enrolment for remote users in all courses on this moodle site.';
-$string['allowedcategories'] = '{$a} allowed categories';
-$string['allowedcourses'] = '{$a} allowed courses';
-$string['allowedcourseslinktext'] = 'Edit allowed courses and categories here.';
-$string['couldnotcreateuser'] = 'An error occurred while trying to create that user!';
-$string['couldnotenrol'] = 'Sorry, could not unenrol that user from that course!';
-$string['coursenotfound'] = 'Sorry, but that course doesn\'t exist';
-$string['courseunavailable'] = 'Sorry, but that course isn\'t available';
-$string['description'] = 'The MNET enrolment plugin allows networked sites to enrol their users on some or all of the courses on this moodle site.';
-$string['enrolname'] = 'Moodle Networking';
 $string['mnet_enrol_description'] = 'Publish this service to allow administrators at {$a} to enrol their students in courses you have created on your server.<br/><ul><li><em>Dependency</em>: You must also <strong>publish</strong> the SSO (Service Provider) service to {$a}.</li><li><em>Dependency</em>: You must also <strong>subscribe</strong> to the SSO (Identity Provider) service on {$a}.</li></ul><br/>Subscribe to this service to be able to enrol your students in courses  on {$a}.<br/><ul><li><em>Dependency</em>: You must also <strong>subscribe</strong> to the SSO (Service Provider) service on {$a}.</li><li><em>Dependency</em>: You must also <strong>publish</strong> the SSO (Identity Provider) service to {$a}.</li></ul><br/>';
 $string['mnet_enrol_name'] = 'Moodle Networked Enrolment';
-$string['mnetlocalforexternal'] = 'Local courses for external users';
-$string['nocategoriesdefined'] = 'No course categories found. Define new categories <a href="{$a}">here</a>.';
-$string['nocoursesdefined'] = 'No courses found. Define new courses <a href="{$a}">here</a>.';
-$string['usernotfound'] = 'Sorry, could not find that user record';
+$string['pluginname'] = 'MNet remote enrolments';
+$string['pluginname_desc'] = 'Allows remote MNet host to enrol their users into our courses.';
diff --git a/enrol/mnet/lib.php b/enrol/mnet/lib.php
new file mode 100644 (file)
index 0000000..814f548
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+
+// 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/>.
+
+/**
+ * MNet enrolment plugin
+ *
+ * @package    enrol
+ * @subpackage mnet
+ * @copyright  2010 David Mudrak <david@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die;
+
+/**
+ * MNet enrolment plugin implementation for Moodle 2.x enrolment framework
+ */
+class enrol_mnet_plugin extends enrol_plugin {
+
+}
diff --git a/enrol/mnet/settings.php b/enrol/mnet/settings.php
new file mode 100644 (file)
index 0000000..67a3ab4
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+// 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/>.
+
+/**
+ * Cohort enrolment plugin settings and default values
+ *
+ * @package    enrol
+ * @subpackage mnet
+ * @copyright  2010 David Mudrak <david@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die;
+
+if ($ADMIN->fulltree) {
+
+    //--- general settings -----------------------------------------------------------------------------------
+    $settings->add(new admin_setting_heading('enrol_mnet_settings', '', get_string('pluginname_desc', 'enrol_mnet')));
+
+    //--- enrol instance defaults ----------------------------------------------------------------------------
+    if (!during_initial_install()) {
+        $options = get_default_enrol_roles(get_context_instance(CONTEXT_SYSTEM));
+        $student = get_archetype_roles('student');
+        $student = reset($student);
+        $settings->add(new admin_setting_configselect_with_advanced('enrol_mnet/roleid',
+            get_string('defaultrole', 'role'), '',
+            array('value'=>$student->id, 'adv'=>true), $options));
+    }
+}
index 6ab273c..20d3b0c 100644 (file)
@@ -1,3 +1,27 @@
 <?php
 
-$plugin->version = 2010021800;
+// 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/>.
+
+/**
+ * MNet enrolment plugin version specification.
+ *
+ * @package    enrol
+ * @subpackage mnet
+ * @copyright  2010 David Mudrak <david@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+$plugin->version = 2010071400;