I have a really tight deadline on this, so any ideas, no matter how crazy, I'm open to.
I have a site (Revo 2.2.0) where admins have entered a bunch of listings (resources). Users can register on the site (I'm using Login) and be made "owner" (set in a template variable) of those listings by the admins. A registered user can add new listings, and edit and delete listings they own. I'm using Newspublisher for this, so far. All additions/changes/delete requests must be moderated by site admins, and no changes are to be made on the live website until approved. (Admins will be notified of additions and changes by ResourceWatcher.)
Admins will be using only the MODx admin interface, users will be using only the front-end Newspublisher interface. I'll hand-code whatever is necessary, I'm just trying to figure out the best way to handle this.
Adding is easy. I just make new listings unpublished. The admin simply has to review the listing and then publish it (or not). (I had to do a slightly bizarre hack to a Newspublisher template using an uncached snippet to automatically set the owner to the current user, but it works...)
Deleting is easy enough. I've created a template variable that will be set to true if a user requests to delete the listing. The admin either deletes the listing, or sets that variable back to false if they don't want it deleted for whatever reason.
Editing is where I'm stuck. Easy would be to simply unpublish a resource if a user edits it. However the client wants the old version of the published resource to continue to display on the site until the edits are approved, and they want to be able to compare the original information with the user's changes before approving them.
Each listing is pretty much the pagetitle and a long list of template variables. One solution I've thought of is to duplicate each template variable the user can edit, and use the duplicated set to store the edits. Then use some kind of back-end code that runs when the admin approves the changes that copies the edits over the original values. Clunky, but I think it will work...
But I've been looking at add-ons wondering if there's some kind of alternate way to do this. I've found VersionX2, although it sounds like I'd have to hack it to work as the client wants, so that the most recent changes aren't displayed on the live site. But at least it does take care of the problem of storing edits. There's Group Edit which, well, seems to be in Russian, but "Component for group editing of resources" could help. There's MIGX which, well, frankly I'm not sure exactly what it does by reading it, but it could be useful.
I've also thought of other ideas, like creating completely new resources when a user edits an existing one, or storing all user edits as a JSON string in a single TV and dealing with them in the admin resource editor, but I haven't come up with anything I really like.
Oh, the final bit of difficulty is that this is a live site, so I have to do all of my experimenting without breaking anything, or clone this monster site somewhere else to experiment...
So... thoughts?