Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.

Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403] [Versions 401 and 403] [Versions 402 and 403]

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * Login block
  19   *
  20   * @package   block_login
  21   * @copyright 1999 onwards Martin Dougiamas  {@link http://moodle.com}
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  class block_login extends block_base {
  26      function init() {
  27          $this->title = get_string('pluginname', 'block_login');
  28      }
  29  
  30      function applicable_formats() {
  31          return array('site' => true);
  32      }
  33  
  34      function get_content () {
  35          global $USER, $CFG, $SESSION, $OUTPUT;
  36          require_once($CFG->libdir . '/authlib.php');
  37  
  38          $wwwroot = '';
  39          $signup = '';
  40  
  41          if ($this->content !== NULL) {
  42              return $this->content;
  43          }
  44  
  45          $wwwroot = $CFG->wwwroot;
  46  
  47          if (signup_is_enabled()) {
  48              $signup = $wwwroot . '/login/signup.php';
  49          }
  50          // TODO: now that we have multiauth it is hard to find out if there is a way to change password
  51          $forgot = $wwwroot . '/login/forgot_password.php';
  52  
  53  
  54          $username = get_moodle_cookie();
  55  
  56          $this->content = new stdClass();
  57          $this->content->footer = '';
  58          $this->content->text = '';
  59  
  60          if (!isloggedin() or isguestuser()) {   // Show the block
  61              if (empty($CFG->authloginviaemail)) {
  62                  $strusername = get_string('username');
  63              } else {
  64                  $strusername = get_string('usernameemail');
  65              }
  66  
  67              $this->content->text .= "\n".'<form class="loginform" id="login" method="post" action="'.get_login_url().'">';
  68  
  69              $this->content->text .= '<div class="form-group">';
  70              $this->content->text .= '<label for="login_username">'.$strusername.'</label>';
  71              $this->content->text .= '<input type="text" name="username" id="login_username" ';
  72              $this->content->text .= ' class="form-control" value="'.s($username).'" autocomplete="username"/></div>';
  73  
  74              $this->content->text .= '<div class="form-group"><label for="login_password">'.get_string('password').'</label>';
  75  
  76              $this->content->text .= '<input type="password" name="password" id="login_password" ';
  77              $this->content->text .= ' class="form-control" value="" autocomplete="current-password"/>';
  78              $this->content->text .= '</div>';
  79  
  80              // ReCaptcha.
  81              if (login_captcha_enabled()) {
  82                  require_once($CFG->libdir . '/recaptchalib_v2.php');
  83                  $this->content->text .= '<div class="form-group">';
  84                  $this->content->text .= recaptcha_get_challenge_html(RECAPTCHA_API_URL, $CFG->recaptchapublickey,
  85                      current_language(), true);
  86                  $this->content->text .= '</div>';
  87              }
  88  
  89              $this->content->text .= '<div class="form-group">';
  90              $this->content->text .= '<input type="submit" class="btn btn-primary btn-block" value="'.get_string('login').'" />';
  91              $this->content->text .= '</div>';
  92              $this->content->text .= '<input type="hidden" name="logintoken" value="'.s(\core\session\manager::get_login_token()).'" />';
  93  
  94              $this->content->text .= "</form>\n";
  95  
  96              if (!empty($signup)) {
  97                  $this->content->text .= '<div><a href="'.$signup.'">'.get_string('startsignup').'</a></div>';
  98              }
  99              if (!empty($forgot)) {
 100                  $this->content->text .= '<div><a href="'.$forgot.'">'.get_string('forgotaccount').'</a></div>';
 101              }
 102  
 103              $authsequence = get_enabled_auth_plugins(); // Get all auths, in sequence.
 104              $potentialidps = array();
 105              foreach ($authsequence as $authname) {
 106                  $authplugin = get_auth_plugin($authname);
 107                  $potentialidps = array_merge($potentialidps, $authplugin->loginpage_idp_list($this->page->url->out(false)));
 108              }
 109  
 110              if (!empty($potentialidps)) {
 111                  $this->content->text .= '<div class="potentialidps">';
 112                  $this->content->text .= '<h6>' . get_string('potentialidps', 'auth') . '</h6>';
 113                  $this->content->text .= '<div class="potentialidplist">';
 114                  foreach ($potentialidps as $idp) {
 115                      $this->content->text .= '<div class="potentialidp">';
 116                      $this->content->text .= '<a class="btn btn-secondary btn-block" ';
 117                      $this->content->text .= 'href="' . $idp['url']->out() . '" title="' . s($idp['name']) . '">';
 118                      if (!empty($idp['iconurl'])) {
 119                          $this->content->text .= '<img src="' . s($idp['iconurl']) . '" width="24" height="24" class="mr-1"/>';
 120                      }
 121                      $this->content->text .= s($idp['name']) . '</a></div>';
 122                  }
 123                  $this->content->text .= '</div>';
 124                  $this->content->text .= '</div>';
 125              }
 126          }
 127  
 128          return $this->content;
 129      }
 130  }