Again, the creators of the “Lock out” feature (these were original Openfire developers ~15 years ago) probably thought of it to only disable the login for the locked user. So it works as they intended and Spark, inVerse and other clients work ok, as the user is not removed from the list. There is a feature request (which i have posted a link for) to add an option to hide the user. Although, there is most probably no “hide” option in XMPP. So the only way to implement a temporary hiding of a user would be to remove all presence subscriptions (removing it from other users rosters) and save them somewhere to add them back once it is not hidden anymore. That sounds too complex for an action which could be accomplished by admin by just pressing X in the group and later adding that user back into group. And this only would apply to shared groups. If someone have added a contact manually to their personal roster, you shouldn’t mess with personal roster by removing users (you could, but it wouldn’t be a good practice). Say in Skype for Business if you have added someone to your roster, it will stay there even when this user is DELETED from the system (speaking about logic). A user has to manually remove such non-existing users from his contacts. In AD if you disable a user, it is still showing in the address book unless you remove it from the groups or mark “hide in the address list” option. Hey, the feature request is here. If you or someone can come up with the patch, it might be applied. Ignite Realtime team is volunteer based. There is not enough time for everything.
As for the log out option in inVerse. This sounds reasonable, though as it is based on another product (Converse) it might require support for this in that library first. [OF-1361] Add an option to log out in inVerse client - IgniteRealtime JIRA