MDL-23489 auth plugins can specify own edit profile url - patch submitted by Jay...
authorPetr Skoda <skodak@moodle.org>
Wed, 18 Aug 2010 22:07:00 +0000 (22:07 +0000)
committerPetr Skoda <skodak@moodle.org>
Wed, 18 Aug 2010 22:07:00 +0000 (22:07 +0000)
15 files changed:
auth/cas/auth.php
auth/db/auth.php
auth/email/auth.php
auth/imap/auth.php
auth/ldap/auth.php
auth/manual/auth.php
auth/mnet/auth.php
auth/none/auth.php
auth/pop3/auth.php
auth/webservice/auth.php
lang/en/auth.php
lib/authlib.php
lib/navigationlib.php
login/index.php
user/edit.php

index c8f3faa..33fee98 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * @author Martin Dougiamas
  * @author Jerome GUTIERREZ
- * @author Iñaki Arenaza
+ * @author Iaki Arenaza
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package moodle multiauth
  *
@@ -209,10 +209,10 @@ class auth_plugin_cas extends auth_plugin_ldap {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return '';
+        return null;
     }
 
     /**
index abc23f8..7682da1 100644 (file)
@@ -597,15 +597,15 @@ class auth_plugin_db extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
         if ($this->config->passtype == 'internal') {
             // standard form
-            return '';
+            return null;
         } else {
             // use custom url
-            return $this->config->changepasswordurl;
+            return new moodle_url($this->config->changepasswordurl);
         }
     }
 
index e4ab793..d57f11e 100644 (file)
@@ -173,10 +173,10 @@ class auth_plugin_email extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return mixed
+     * @return moodle_url
      */
     function change_password_url() {
-        return ''; // use dafult internal method
+        return null; // use default internal method
     }
 
     /**
index 5bc22ea..17df433 100644 (file)
@@ -108,10 +108,10 @@ class auth_plugin_imap extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return $this->config->changepasswordurl;
+        return new moodle_url($this->config->changepasswordurl);
     }
 
     /**
index 79ec8a7..f114d1d 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @author Martin Dougiamas
- * @author Iñaki Arenaza
+ * @author Iaki Arenaza
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package moodle multiauth
  *
@@ -1098,7 +1098,7 @@ class auth_plugin_ldap extends auth_plugin_base {
             if (empty($user_entry)) {
                 $attribs = join (', ', $search_attribs);
                 error_log($this->errorlogtag.get_string('updateusernotfound', 'auth_ldap',
-                                                          array('userdn'=>$user_dn, 
+                                                          array('userdn'=>$user_dn,
                                                                 'attribs'=>$attribs)));
                 return false; // old user not found!
             } else if (count($user_entry) > 1) {
@@ -1493,13 +1493,13 @@ class auth_plugin_ldap extends auth_plugin_base {
      * Returns the URL for changing the user's password, or empty if the default can
      * be used.
      *
-     * @return string url
+     * @return moodle_url
      */
     function change_password_url() {
         if (empty($this->config->stdchangepassword)) {
-            return $this->config->changepasswordurl;
+            return new moodle_url($this->config->changepasswordurl);
         } else {
-            return '';
+            return null;
         }
     }
 
index 31a643a..e2b4906 100644 (file)
@@ -89,10 +89,10 @@ class auth_plugin_manual extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return '';
+        return null;
     }
 
     /**
index cc349bd..0eeb93e 100644 (file)
@@ -565,10 +565,10 @@ class auth_plugin_mnet extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or false if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return '';
+        return null;
     }
 
     /**
index 9a1cbf9..f0771d8 100644 (file)
@@ -89,10 +89,10 @@ class auth_plugin_none extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return '';
+        return null;
     }
 
     /**
index 2becd43..8fe4f94 100644 (file)
@@ -108,10 +108,10 @@ class auth_plugin_pop3 extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or false if the default can
      * be used.
      *
-     * @return bool
+     * @return moodle_url
      */
     function change_password_url() {
-        return $this->config->changepasswordurl;
+        return new moodle_url($this->config->changepasswordurl);
     }
 
     /**
index a2315b6..15a7598 100644 (file)
@@ -111,10 +111,10 @@ class auth_plugin_webservice extends auth_plugin_base {
      * Returns the URL for changing the user's pw, or empty if the default can
      * be used.
      *
-     * @return string
+     * @return moodle_url
      */
     function change_password_url() {
-        return '';
+        return null;
     }
 
     /**
index decfae4..072dc59 100644 (file)
@@ -96,6 +96,7 @@ $string['locked'] = 'Locked';
 $string['md5'] = 'MD5 hash';
 $string['nopasswordchange'] = 'Password can not be changed';
 $string['nopasswordchangeforced'] = 'You cannot proceed without changing your password, however there is no available page for changing it. Please contact your Moodle Administrator.';
+$string['noprofileedit'] = 'Profile can not be edited';
 $string['ntlmsso_attempting'] = 'Attempting Single Sign On via NTLM...';
 $string['ntlmsso_failed'] = 'Auto-login failed, try the normal login page...';
 $string['ntlmsso_isdisabled'] = 'NTLM SSO is disabled.';
index 48d1c37..9b9c9b4 100644 (file)
@@ -139,11 +139,36 @@ class auth_plugin_base {
      * This method is used if can_change_password() returns true.
      * This method is called only when user is logged in, it may use global $USER.
      *
-     * @return string
+     * @return moodle_url url of the profile page or null if standard used
      */
     function change_password_url() {
         //override if needed
-        return '';
+        return null;
+    }
+
+    /**
+     * Returns true if this authentication plugin can edit the users'
+     * profile.
+     *
+     * @return bool
+     */
+    function can_edit_profile() {
+        //override if needed
+        return true;
+    }
+
+    /**
+     * Returns the URL for editing the users' profile, or empty if the default
+     * URL can be used.
+     *
+     * This method is used if can_edit_profile() returns true.
+     * This method is called only when user is logged in, it may use global $USER.
+     *
+     * @return moodle_url url of the profile page or null if standard used
+     */
+    function edit_profile_url() {
+        //override if needed
+        return null;
     }
 
     /**
index 3456300..a4d391c 100644 (file)
@@ -3260,8 +3260,16 @@ class settings_navigation extends navigation_node {
                 $url = new moodle_url('/user/editadvanced.php', array('id'=>$user->id, 'course'=>$course->id));
                 $usersetting->add(get_string('editmyprofile'), $url, self::TYPE_SETTING);
             } else if ((has_capability('moodle/user:editprofile', $usercontext) && !is_siteadmin($user)) || ($currentuser && has_capability('moodle/user:editownprofile', $systemcontext))) {
-                $url = new moodle_url('/user/edit.php', array('id'=>$user->id, 'course'=>$course->id));
-                $usersetting->add(get_string('editmyprofile'), $url, self::TYPE_SETTING);
+                               if (!empty($user->auth)) {
+                                       $userauth = get_auth_plugin($user->auth);
+                                       if ($userauth->can_edit_profile()) {
+                                               $url = $userauth->edit_profile_url();
+                                               if (empty($url)) {
+                                                       $url = new moodle_url('/user/edit.php', array('id'=>$user->id, 'course'=>$course->id));
+                                               }
+                                               $usersetting->add(get_string('editmyprofile'), $url, self::TYPE_SETTING);
+                                       }
+                               }
             }
         }
 
index a9c0784..9c4579f 100644 (file)
@@ -194,7 +194,7 @@ if (empty($CFG->usesid) and $testcookies and (get_moodle_cookie() == '')) {    /
         if (!empty($userauth->config->expiration) and $userauth->config->expiration == 1) {
             if ($userauth->can_change_password()) {
                 $passwordchangeurl = $userauth->change_password_url();
-                if(!$passwordchangeurl) {
+                if (!$passwordchangeurl) {
                     $passwordchangeurl = $CFG->httpswwwroot.'/login/change_password.php';
                 }
             } else {
index 32fa072..5d2a02f 100644 (file)
@@ -86,6 +86,18 @@ if (is_mnet_remote_user($user)) {
     redirect($CFG->wwwroot . "/user/view.php?course={$course->id}");
 }
 
+// load the appropriate auth plugin
+$userauth = get_auth_plugin($user->auth);
+
+if (!$userauth->can_edit_profile()) {
+    print_error('noprofileedit', 'auth');
+}
+
+if ($editurl = $userauth->edit_profile_url()) {
+    // this internal script not used
+    redirect($editurl);
+}
+
 if ($course->id == SITEID) {
     $coursecontext = get_context_instance(CONTEXT_SYSTEM);   // SYSTEM context
 } else {