diff --git a/core/modules/user/lib/Drupal/user/UserStorageController.php b/core/modules/user/lib/Drupal/user/UserStorageController.php index 9cbcf0e..9271f2f 100644 --- a/core/modules/user/lib/Drupal/user/UserStorageController.php +++ b/core/modules/user/lib/Drupal/user/UserStorageController.php @@ -110,7 +110,7 @@ public function save(EntityInterface $entity) { /** * {@inheritdoc} */ - public function saveRoles(EntityInterface $user) { + public function saveRoles(UserInterface $user) { $query = $this->database->insert('users_roles')->fields(array('uid', 'rid')); foreach ($user->getRoles() as $rid) { if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) { @@ -127,7 +127,7 @@ public function saveRoles(EntityInterface $user) { * {@inheritdoc} */ public function addRoles(array $users) { - $result = db_query('SELECT rid, uid FROM {users_roles} WHERE uid IN (:uids)', array(':uids' => array_keys($users))); + $result = $this->database->query('SELECT rid, uid FROM {users_roles} WHERE uid IN (:uids)', array(':uids' => array_keys($users))); foreach ($result as $record) { $users[$record->uid]->roles[] = $record->rid; } @@ -142,4 +142,14 @@ public function deleteUserRoles(array $uids) { ->execute(); } + /** + * {@inheritdoc} + */ + public function updateLastLoginTimestamp(UserInterface $account) { + $this->database->update('users') + ->fields(array('login' => $account->getLastLoginTime())) + ->condition('uid', $account->id()) + ->execute(); + } + } diff --git a/core/modules/user/lib/Drupal/user/UserStorageControllerInterface.php b/core/modules/user/lib/Drupal/user/UserStorageControllerInterface.php index 8768869..4797002 100644 --- a/core/modules/user/lib/Drupal/user/UserStorageControllerInterface.php +++ b/core/modules/user/lib/Drupal/user/UserStorageControllerInterface.php @@ -25,9 +25,9 @@ public function addRoles(array $users); /** * Save the user's roles. * - * @param \Drupal\Core\Entity\EntityInterface $user + * @param \Drupal\user\UserInterface $account */ - public function saveRoles(EntityInterface $user); + public function saveRoles(UserInterface $user); /** * Remove the roles of a user. @@ -36,4 +36,10 @@ public function saveRoles(EntityInterface $user); */ public function deleteUserRoles(array $uids); + /** + * Update the last login timestamp of the user. + * + * @param \Drupal\user\UserInterface $account + */ + public function updateLastLoginTimestamp(UserInterface $account); } diff --git a/core/modules/user/user.module b/core/modules/user/user.module index d080b21..e001e57 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -1050,8 +1050,9 @@ function user_login_finalize(UserInterface $account) { watchdog('user', 'Session opened for %name.', array('%name' => $user->getUsername())); // Update the user table timestamp noting user has logged in. // This is also used to invalidate one-time login links. - $account->setLastLoginTime(REQUEST_TIME); - $user->save(); + \Drupal::entityManager() + ->getStorageController('user') + ->updateLastLoginTimestamp($account); // Regenerate the session ID to prevent against session fixation attacks. // This is called before hook_user in case one of those functions fails @@ -1831,8 +1832,9 @@ function user_node_load($nodes, $types) { } // Add loaded user name values back into the node objects. - $controller = Drupal::entityManager()->getStorageController('user'); - $users = $controller->loadMultiple($uids); + $users = \Drupal::entityManager() + ->getStorageController('user') + ->loadMultiple($uids); foreach ($uids as $nid => $uid) { $nodes[$nid]->name = $users[$uid]->getUsername(); }