For another forum of mine I was forced to develop a plugin that would allow for post pre-approval because one did not already exist, and now I'm providing it to you all! Note that this will ONLY work with Vanilla 2.0.18.
The plugin itself functions very well. The basic function is simple: All new discussions and comments are invisible until approved by a moderator. However, it has some nice, albeit common-sense features that are nonetheless lacking in some other implementations that I'm proud to say this plugin does have:
A user can see his own hidden posts and discussions, so no risk of double posting.
Posts retain their original post date when approved, so comment structures in discussions remain intact.
Moderators can see all pending posts when viewing a discussion as normal, and each pending post is clearly labeled so none will be missed.
Moderators can opt-in to receive email notifications when a new discussion or comment is posted that requires approval, and with a single click from within the email can instantly approve the post.
However, the plugin does lack in certain areas. It's not a "refined" solution and was not designed to be released publicly originally. So, what this plugin does NOT have:
No custom permission to allow a user to approve posts, it uses Category Management.
No customization interface at all.
No "moderation center" that allows a moderator to view all pending posts in a list.
DOES NOT FILTER ACTIVITIES. I highly recommend disabling activities, otherwise it defeats the purpose of having post approval. To do that, remove the Garden > Activity > View permission for all roles and add the following line to your config: $Configuration['Garden']['Profile']['ShowActivities'] = FALSE;
It also does not notify a user when their post has been approved and announcements always skip the moderation queue (figured only mods would post announcements anyway). Still, it's better than nothing.
Let me know if you have any trouble downloading and installing the plugin. If it's my fault I want to fix it. If it's your fault, I still want to fix it, but I might be lazy about it.