forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-45203 implement new event user_password_updated
- Loading branch information
Showing
6 changed files
with
231 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
<?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/>. | ||
|
||
/** | ||
* User password updated event. | ||
* | ||
* @package core | ||
* @copyright 2014 Petr Skoda | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
namespace core\event; | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
/** | ||
* Event when user password is changed or reset. | ||
* | ||
* @property-read array $other { | ||
* Extra information about event. | ||
* | ||
* - bool forgottenreset: true means reset via token. | ||
* } | ||
* | ||
* @package core | ||
* @since Moodle 2.7 | ||
* @copyright 2014 Petr Skoda | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
class user_password_updated extends base { | ||
/** | ||
* Create event for user password changing and resetting. | ||
* | ||
* @param \stdClass $user | ||
* @param bool $forgottenreset true if reset via recovery link | ||
* @return user_password_updated | ||
*/ | ||
public static function create_from_user(\stdClass $user, $forgottenreset = false) { | ||
$data = array( | ||
'context' => \context_user::instance($user->id), | ||
'relateduserid' => $user->id, | ||
'other' => array('forgottenreset' => $forgottenreset), | ||
); | ||
$event = self::create($data); | ||
$event->add_record_snapshot('user', $user); | ||
return $event; | ||
} | ||
|
||
/** | ||
* Initialise required event data properties. | ||
*/ | ||
protected function init() { | ||
$this->data['crud'] = 'u'; | ||
$this->data['edulevel'] = self::LEVEL_OTHER; | ||
} | ||
|
||
/** | ||
* Returns localised event name. | ||
* | ||
* @return string | ||
*/ | ||
public static function get_name() { | ||
return get_string('eventuserpasswordupdated'); | ||
} | ||
|
||
/** | ||
* Returns non-localised event description with id's for admin use only. | ||
* | ||
* @return string | ||
*/ | ||
public function get_description() { | ||
if ($this->userid == $this->relateduserid) { | ||
if ($this->other['forgottenreset']) { | ||
return "User $this->userid reset their password"; | ||
} | ||
return "User $this->userid changed their password"; | ||
} else { | ||
return "User $this->userid changed password of user $this->relateduserid"; | ||
} | ||
} | ||
|
||
/** | ||
* Returns relevant URL. | ||
* | ||
* @return \moodle_url | ||
*/ | ||
public function get_url() { | ||
return new \moodle_url('/user/profile.php', array('id' => $this->relateduserid)); | ||
} | ||
|
||
/** | ||
* Returns array of parameters to be passed to legacy logging. | ||
* | ||
* @return array|null | ||
*/ | ||
protected function get_legacy_logdata() { | ||
if (!$this->other['forgottenreset']) { | ||
// We did not log password changes in earlier versions. | ||
return null; | ||
} | ||
return array(SITEID, 'user', 'set password', 'profile.php?id='.$this->userid, $this->relateduserid); | ||
} | ||
|
||
/** | ||
* Custom validation. | ||
* | ||
* @throws \coding_exception | ||
*/ | ||
protected function validate_data() { | ||
parent::validate_data(); | ||
|
||
if (!$this->relateduserid) { | ||
throw new \coding_exception('relateduserid needs to be set.'); | ||
} | ||
|
||
if (!isset($this->other['forgottenreset'])) { | ||
throw new \coding_exception('forgottenreset needs to be set in $other.'); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?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/>. | ||
|
||
/** | ||
* Tests for password changes event. | ||
* | ||
* @package core | ||
* @category phpunit | ||
* @copyright 2014 Petr Skoda | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
|
||
defined('MOODLE_INTERNAL') || die(); | ||
|
||
/** | ||
* Tests for event \core\event\user_password_updated | ||
* | ||
* @package core | ||
* @category phpunit | ||
* @copyright 2014 Petr Skoda | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
*/ | ||
class core_event_user_password_updated_testcase extends advanced_testcase { | ||
/** | ||
* Test the event. | ||
*/ | ||
public function test_event() { | ||
$this->resetAfterTest(); | ||
|
||
$user1 = $this->getDataGenerator()->create_user(); | ||
$context1 = context_user::instance($user1->id); | ||
$user2 = $this->getDataGenerator()->create_user(); | ||
$context2 = context_user::instance($user2->id); | ||
|
||
$this->setUser($user1); | ||
|
||
// Changing own password. | ||
$event = \core\event\user_password_updated::create_from_user($user1); | ||
$this->assertEventContextNotUsed($event); | ||
$this->assertEquals($user1->id, $event->relateduserid); | ||
$this->assertSame($context1, $event->get_context()); | ||
$this->assertEventLegacyLogData(null, $event); | ||
$this->assertFalse($event->other['forgottenreset']); | ||
$event->trigger(); | ||
|
||
// Changing password of other user. | ||
$event = \core\event\user_password_updated::create_from_user($user2); | ||
$this->assertEventContextNotUsed($event); | ||
$this->assertEquals($user2->id, $event->relateduserid); | ||
$this->assertSame($context2, $event->get_context()); | ||
$this->assertEventLegacyLogData(null, $event); | ||
$this->assertFalse($event->other['forgottenreset']); | ||
$event->trigger(); | ||
|
||
// Password reset. | ||
$event = \core\event\user_password_updated::create_from_user($user1, true); | ||
$this->assertEventContextNotUsed($event); | ||
$this->assertEquals($user1->id, $event->relateduserid); | ||
$this->assertSame($context1, $event->get_context()); | ||
$this->assertEventLegacyLogData(array(SITEID, 'user', 'set password', 'profile.php?id='.$user1->id, $user1->id), $event); | ||
$this->assertTrue($event->other['forgottenreset']); | ||
$event->trigger(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters