Add method to delete all acp sessions for a specific user
authorjoshuaruesweg <ruesweg@woltlab.com>
Sat, 24 Oct 2020 14:14:02 +0000 (16:14 +0200)
committerjoshuaruesweg <ruesweg@woltlab.com>
Mon, 2 Nov 2020 11:22:40 +0000 (12:22 +0100)
wcfsetup/install/files/lib/system/session/SessionHandler.class.php

index 017a234bbc6741b8347d78e901c1c59732771c65..5dad6eb8de173da4ffaeaa96073d4cbd28a9323a 100644 (file)
@@ -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.
         */