Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.

Differences Between: [Versions 310 and 401] [Versions 311 and 401] [Versions 39 and 401] [Versions 401 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              $this->content->text .= '<div class="form-group">';
  81              $this->content->text .= '<input type="submit" class="btn btn-primary btn-block" value="'.get_string('login').'" />';
  82              $this->content->text .= '</div>';
  83              $this->content->text .= '<input type="hidden" name="logintoken" value="'.s(\core\session\manager::get_login_token()).'" />';
  84  
  85              $this->content->text .= "</form>\n";
  86  
  87              if (!empty($signup)) {
  88                  $this->content->text .= '<div><a href="'.$signup.'">'.get_string('startsignup').'</a></div>';
  89              }
  90              if (!empty($forgot)) {
  91                  $this->content->text .= '<div><a href="'.$forgot.'">'.get_string('forgotaccount').'</a></div>';
  92              }
  93  
  94              $authsequence = get_enabled_auth_plugins(); // Get all auths, in sequence.
  95              $potentialidps = array();
  96              foreach ($authsequence as $authname) {
  97                  $authplugin = get_auth_plugin($authname);
  98                  $potentialidps = array_merge($potentialidps, $authplugin->loginpage_idp_list($this->page->url->out(false)));
  99              }
 100  
 101              if (!empty($potentialidps)) {
 102                  $this->content->text .= '<div class="potentialidps">';
 103                  $this->content->text .= '<h6>' . get_string('potentialidps', 'auth') . '</h6>';
 104                  $this->content->text .= '<div class="potentialidplist">';
 105                  foreach ($potentialidps as $idp) {
 106                      $this->content->text .= '<div class="potentialidp">';
 107                      $this->content->text .= '<a class="btn btn-secondary btn-block" ';
 108                      $this->content->text .= 'href="' . $idp['url']->out() . '" title="' . s($idp['name']) . '">';
 109                      if (!empty($idp['iconurl'])) {
 110                          $this->content->text .= '<img src="' . s($idp['iconurl']) . '" width="24" height="24" class="mr-1"/>';
 111                      }
 112                      $this->content->text .= s($idp['name']) . '</a></div>';
 113                  }
 114                  $this->content->text .= '</div>';
 115                  $this->content->text .= '</div>';
 116              }
 117          }
 118  
 119          return $this->content;
 120      }
 121  }