June 2011 will be recorded in infamy as the month in which Everything2 users were given the power to delete their own stuff and to dabble in dealings with the undead.
I'm rather surprised by the length of the following: I thought I was busy with other things this month.
Background: How things Made Sense at the Time
The system everything2 had for removing content was one of the less comprehensible features of the site: your writeup was 'marked for destruction' on 'Node Row' for a while, then it disappeared, then after a while it reappeared in Node Heaven, where you couldn't actually do anything with it. But there were reasons for the madness:
First: back then in the dim mists of antiquity, deleting records from a database with MySql was horribly expensive in computer resources. So most deletions were saved up (hence Node Row) until the middle of the night, when there wasn't much traffic and there was some computer power to spare.
Secondly, you can't just go deleting other people's stuff for ever. But nor could you let people delete the copy you therefore kept just in case. (Because deleting stuff was horribly expensive. (But couldn't you have saved it up until midnight? Never mind, let bygones be bygones.))
These days, in the thrusting service economy of the Third Millennium, we can delete stuff from the database any time we like without the site grinding to a halt. In addition to which we now have the new drafts system, so we can remove people's writeups without deleting them by turning them (back) into drafts. Which no-one deletes but their own author. And if people want to delete their own stuff for ever, that's up to them, and we don't need to keep a copy just in case. So:
- The htmlcode unpublishwriteup turns a writeup back into a draft. It removes the writeup from its page (e2node), removes it from any categories it is in, removes any editor insurance on the writeup, and records the time of removal, who did it, and any reason in a system node note. It inserts the editor-only notification editor removed writeup or author removed writeup as appropriate. The notifications link to the removed draft if it still exists and the editor has permission to see it, and to the page it was on if not.
- There is a new draft status 'removed', especially for drafts that have been removed. setdraftstatus and voteit explain what it means, while canseedraft treats it as equivalent to 'public', since the author had made their work public and editors in particular may want to see what other editors have been removing. The author can of course change the status to something else, and once they have done so, they can publish it again. (It is hoped that people will be sensible about republishing.)
- A new opcode, remove, takes over from massacre. Instead of marking a writeup for destruction or immediately deleting it, it runs it through unpublishwriteup. Any votes or cools that the writeup has earned are not deleted, so they reappear if the resulting draft is republished later.
- Writeup admin tools have changed: voteit provides removal tools instead of nuking tools for editors (who will not notice much of a difference in how they are used), and a removal tool for users on their own writeups. The htmlcodes show writeups and displayWriteupInfo work together to make sure the user gets the tool whatever their writeup display settings.
- The killing floor II unpublishes writeups instead of nuking them or marking them for destruction. The maximum prejudice flounce tool that is used if a user wants all of their writeups removed needed a minor change to continue working with it. (As we found out a little too late.)
- e2node maintenance delete removes writeups with unpublishwriteup when a page containing them is deleted, instead of deleting them. Not that this happens much.
- publishdraft notes the time of publication if a draft has a history, defined as any system-generated node notes. It restores the cool count when a previously removed draft is republished by counting the individual C!s.
- Draft maintenance delete deletes any votes and C!s attached to a former writeup when it is deleted. It makes a record of them beforehand if the author signed up before October 29, 2008 and has not yet recalculated their XP under the new system that was introduced then. Recalculate XP includes this information along with that from existing writeups and Node Heaven when recalculating.
- The New Writeups nodelet and Everything User Search no longer show nuking-related information to editors. So New Writeups Feeder no longer needs to find and record information from Node Row about writeups being marked for destruction or restored.
- When a previously published draft that had been voted on is republished, setwriteuptype checks the box to make it hidden from New Writeups by default.
No more Heaven
- The htmlcode angeltodraft turns an old nuked writeup into a draft. It records the time of resurrection, the original time of posting, and the name of the deleting editor in a system node note. The new draft has the same node_id as the old writeup, so any C!s that the writeup had will reappear if it is republished (after suitable revision, please). (Unfortunately, the individual votes on writeups were deleted when they were nuked, so the reputation of a republished revenant will not be the sum of the recorded votes.)
- There is a new draft status 'nuked', specially for drafts that have been restored from Node Heaven. The htmlcodes setdraftstatus and voteit explain what it means, while canseedraft treats it as equivalent to 'private', since old writeups in Node Heaven are also private. You can of course change the status to something else.
- Rebirthing room (I wasn't feeling inspired when I came up with that name) restores a single angel and displays the resulting draft. Node Heaven provides a conversion link leading to it for each deleted writeup.
- Node Heaven also provides a Useful Button to convert all old nukees to drafts. You can choose to leave out boring maintenance writeups and/or writeups whose text was blanked before they were nuked.
- Node Heaven now shows all of your deleted writeups, including those for which the deleting editor was not properly recorded. Of which there are over 80,000 in the database. Who knew?
And with that the 'drafts project', as we called it before it happened, is done. Which is not to say that there won't be improvements to some of its features, in particular the Drafts and Drafts for Review pages.
Other draft-related business
- zen e2node display page wraps the 'Also in this page' section showing hidden writeups/drafts in a div of class 'alsoonthispage'
- show content allows the same flexibility for html-wrapping of entire content items as it always did for content information. Thus a small change in show writeups can add the class 'draftitem' to drafts, whether displayed on their own page or with other writeups and drafts. This makes it possible for stylesheet authors to make drafts look different from writeups, although they are encouraged not to overdo things.
- On the Drafts page, your own drafts are displayed with their status and collaborators in a table, making things easier to read.
- Tools are available to adjust the status of or to publish your own drafts when they are displayed in an e2node.
- In a maintenance node (E2 bugs, suggestions for E2, etc), all users publish their contributions immediately without the option either of creating a draft or of showing the writeup in the New Writeups nodelet.
- There is a 'little-needed' option in Advanced Settings for users who can publish directly to writeups without first creating drafts (level 2 and above) who would like the 'publish directly' button to be selected by default instead of 'post to draft'.
- The opcode insure notes that a writeup is editor-insured in the publication_status field it inherits from the draft nodetype, so a database search for the insuring editor only needs to be made if there is known to be one.
- Writeup maintenance update allows the Virgil and Webster 1913 accounts to be used to edit writeups of type 'definition' and 'lede' without turning them into 'thing's. The htmlcode setwriteuptype that generates the type menu also lets them set these writeup types.
- The opcodes hidewriteup and unhidewriteup, which editors can use to remove/return writeups to the New Writeups nodelet, update the writeup properly and record the hiding/unhiding editor in a system node note.
- Dr. Nate's Secret Lab, with which site admins can restore deleted nodes, no longer creates one new database record for every field in every database table before deleting all of them but one.
- The 'Try this stylesheet out' feature on stylesheet pages now works properly in Google Chrome as well as in browsers that do focus on a link when you click it. As does the 'Use this theme' button on the widget it provides.
- Courtesy of a few new lines of code in usergroup display page, there is now a button on the usergroup pages of usergroups you belong to allowing to leave the usergroup without having to ask anyone.
- Any editor can now remove an editor cool on a nodeshell, even if the editor who cooled it is still active.
- Recent Node Notes does not show system notes unless you ask it to.