Merge branch 'MDL-25881' of git://git.luns.net.uk/moodle
[moodle.git] / auth / email / auth.php
1 <?php
3 /**
4  * @author Martin Dougiamas
5  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
6  * @package moodle multiauth
7  *
8  * Authentication Plugin: Email Authentication
9  *
10  * Standard authentication function.
11  *
12  * 2006-08-28  File created.
13  */
15 if (!defined('MOODLE_INTERNAL')) {
16     die('Direct access to this script is forbidden.');    ///  It must be included from a Moodle page
17 }
19 require_once($CFG->libdir.'/authlib.php');
21 /**
22  * Email authentication plugin.
23  */
24 class auth_plugin_email extends auth_plugin_base {
26     /**
27      * Constructor.
28      */
29     function auth_plugin_email() {
30         $this->authtype = 'email';
31         $this->config = get_config('auth/email');
32     }
34     /**
35      * Returns true if the username and password work and false if they are
36      * wrong or don't exist.
37      *
38      * @param string $username The username
39      * @param string $password The password
40      * @return bool Authentication success or failure.
41      */
42     function user_login ($username, $password) {
43         global $CFG, $DB;
44         if ($user = $DB->get_record('user', array('username'=>$username, 'mnethostid'=>$CFG->mnet_localhost_id))) {
45             return validate_internal_user_password($user, $password);
46         }
47         return false;
48     }
50     /**
51      * Updates the user's password.
52      *
53      * called when the user password is updated.
54      *
55      * @param  object  $user        User table object  (with system magic quotes)
56      * @param  string  $newpassword Plaintext password (with system magic quotes)
57      * @return boolean result
58      *
59      */
60     function user_update_password($user, $newpassword) {
61         $user = get_complete_user_data('id', $user->id);
62         return update_internal_user_password($user, $newpassword);
63     }
65     function can_signup() {
66         return true;
67     }
69     /**
70      * Sign up a new user ready for confirmation.
71      * Password is passed in plaintext.
72      *
73      * @param object $user new user object
74      * @param boolean $notify print notice with link and terminate
75      */
76     function user_signup($user, $notify=true) {
77         global $CFG, $DB;
78         require_once($CFG->dirroot.'/user/profile/lib.php');
80         $user->password = hash_internal_user_password($user->password);
82         $user->id = $DB->insert_record('user', $user);
84         /// Save any custom profile field information
85         profile_save_data($user);
87         $user = $DB->get_record('user', array('id'=>$user->id));
88         events_trigger('user_created', $user);
90         if (! send_confirmation_email($user)) {
91             print_error('auth_emailnoemail','auth_email');
92         }
94         if ($notify) {
95             global $CFG, $PAGE, $OUTPUT;
96             $emailconfirm = get_string('emailconfirm');
97             $PAGE->navbar->add($emailconfirm);
98             $PAGE->set_title($emailconfirm);
99             $PAGE->set_heading($PAGE->course->fullname);
100             echo $OUTPUT->header();
101             notice(get_string('emailconfirmsent', '', $user->email), "$CFG->wwwroot/index.php");
102         } else {
103             return true;
104         }
105     }
107     /**
108      * Returns true if plugin allows confirming of new users.
109      *
110      * @return bool
111      */
112     function can_confirm() {
113         return true;
114     }
116     /**
117      * Confirm the new user as registered.
118      *
119      * @param string $username
120      * @param string $confirmsecret
121      */
122     function user_confirm($username, $confirmsecret) {
123         global $DB;
124         $user = get_complete_user_data('username', $username);
126         if (!empty($user)) {
127             if ($user->confirmed) {
128                 return AUTH_CONFIRM_ALREADY;
130             } else if ($user->auth != 'email') {
131                 return AUTH_CONFIRM_ERROR;
133             } else if ($user->secret == $confirmsecret) {   // They have provided the secret key to get in
134                 $DB->set_field("user", "confirmed", 1, array("id"=>$user->id));
135                 $DB->set_field("user", "firstaccess", time(), array("id"=>$user->id));
136                 return AUTH_CONFIRM_OK;
137             }
138         } else {
139             return AUTH_CONFIRM_ERROR;
140         }
141     }
143     function prevent_local_passwords() {
144         return false;
145     }
147     /**
148      * Returns true if this authentication plugin is 'internal'.
149      *
150      * @return bool
151      */
152     function is_internal() {
153         return true;
154     }
156     /**
157      * Returns true if this authentication plugin can change the user's
158      * password.
159      *
160      * @return bool
161      */
162     function can_change_password() {
163         return true;
164     }
166     /**
167      * Returns the URL for changing the user's pw, or empty if the default can
168      * be used.
169      *
170      * @return moodle_url
171      */
172     function change_password_url() {
173         return null; // use default internal method
174     }
176     /**
177      * Returns true if plugin allows resetting of internal password.
178      *
179      * @return bool
180      */
181     function can_reset_password() {
182         return true;
183     }
185     /**
186      * Prints a form for configuring this authentication plugin.
187      *
188      * This function is called from admin/auth.php, and outputs a full page with
189      * a form for configuring this plugin.
190      *
191      * @param array $page An object containing all the data for this page.
192      */
193     function config_form($config, $err, $user_fields) {
194         include "config.html";
195     }
197     /**
198      * Processes and stores configuration data for this authentication plugin.
199      */
200     function process_config($config) {
201         // set to defaults if undefined
202         if (!isset($config->recaptcha)) {
203             $config->recaptcha = false;
204         }
206         // save settings
207         set_config('recaptcha', $config->recaptcha, 'auth/email');
208         return true;
209     }
211     /**
212      * Returns whether or not the captcha element is enabled, and the admin settings fulfil its requirements.
213      * @return bool
214      */
215     function is_captcha_enabled() {
216         global $CFG;
217         return isset($CFG->recaptchapublickey) && isset($CFG->recaptchaprivatekey) && get_config("auth/{$this->authtype}", 'recaptcha');
218     }