From: joshuaruesweg Date: Sat, 24 Oct 2020 14:14:02 +0000 (+0200) Subject: Add method to delete all acp sessions for a specific user X-Git-Tag: 5.4.0_Alpha_1~656^2~20 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=99ba6326833dc8b7848495c918b659d21ee728ce;p=GitHub%2FWoltLab%2FWCF.git Add method to delete all acp sessions for a specific user --- diff --git a/wcfsetup/install/files/lib/system/session/SessionHandler.class.php b/wcfsetup/install/files/lib/system/session/SessionHandler.class.php index 017a234bbc..5dad6eb8de 100644 --- a/wcfsetup/install/files/lib/system/session/SessionHandler.class.php +++ b/wcfsetup/install/files/lib/system/session/SessionHandler.class.php @@ -1013,6 +1013,28 @@ final class SessionHandler extends SingletonFactory { $statement->execute($conditionBuilder->getParameters()); } + /** + * Deletes the acp sessions for a specific user, except the session with the given session id. + * If the given session id is null or unknown, all acp sessions for the user will be deleted. + */ + public function deleteAcpSessionsExcept(User $user, ?string $sessionID = null): void { + if ($user->userID === 0) { + throw new \InvalidArgumentException("The given user is a guest."); + } + + $conditionBuilder = new PreparedStatementConditionBuilder(); + $conditionBuilder->add('userID = ?', [$user->userID]); + + if ($sessionID !== null) { + $conditionBuilder->add('sessionID <> ?', [$sessionID]); + } + + $sql = "DELETE FROM wcf".WCF_N."_acp_session + ". $conditionBuilder; + $statement = WCF::getDB()->prepareStatement($sql); + $statement->execute($conditionBuilder->getParameters()); + } + /** * Deletes a user session with the given session id. */