This replaces the old simple versioning helper that existed on
e621. The implementaiton is roughly the same but has been updated
to use newer rails methods.
No, it's not very flexible, but it didn't need to be.
While the logic was not particularly complex or spread out it was
made more complicated by the models being dependant on one another.
This creates a central entry point for voting and favorites and
coordinates all transactions.
TODO: upvote/downvote/fav metatags in tag section result in an error
because they attempt to change the transaction isolation mode during
an outer transaction.
Add links to report items to all of the reportable areas of the
site.
Fix a lot of errors surrounding views and bad expectations from
the old codebase.
Change how dmails can be viewed to match the old logic. This prevents
users from creating links to their own dmails that can be shared with
moderators, and instead forces them to be reported.
Sets are still not implemented, so the reporting area for them has
not been tested or revised. That will happen at a later phase when
sets go in.
The distinction between file deletion and banning is pretty weird
and there are a bunch of edge cases that make this not worth
trying to maintain a distinction.
Left in the automatic implication code on banned artists because
it looked useful for automating some of the basic tasks that are
done surrounding DNP artists.
It is desirable for administrators to be able to shape what tags
can and can not be applied to specific posts to cut down on how
many tickets need to be handled about tag vandalism.
TODO: Tell users which tags were not updated if they hit any
locked tags.