The Entity Revision Scheduling module is a bit of a combination module that takes over control of which revision is current and allows the scheduling of future revisions.
The best way to describe what this module does is to watch this 2 minute video (no sound): http://yfrog.com/ng44160214z
In order to achieve this, there are two major components:
A record for supported entities is kept that records which is the 'published' revision and which is the 'draft' revision. During the editing process, the 'draft' revision is loaded to replace the 'published' revision. Whenever a revision is saved, the 'published' revision is then reloaded and resaved to ensure that it remains published even though changes were made to the current revision.
In addition, the 'revision' flag is always set to false if the draft revision is not the same as the public revision, and the checkbox is revealed with a comment so that administrators realize that using the checkbox would create a new draft revision.
Any revision can be set as the draft revision, and then edited, but only the draft revision can be edited.
If the published revision is the same as the draft revision, the revision flag is forced to true and disabled so that the published revision cannot be edited directly.
On cron, a schedule allows the system to automatically switch to a given 'published' revision at a certain time.
For supported entities, the 'revisions' page is completely taken over and replaced with a page that provides the proper tools for seeing which revision is published, which is the draft, seeing the schedule and setting the future schedule.
To use this module, you need to visit Administer >> Configuration >> Entity Revision Scheduler and enable it for whichever entity bundles you want; by default it is not enabled for any bundles.
Each entity/bundle combination has a separate permission for access to scheduling.
The module provides a widget as a block that can be used to preview what a controlled entity will look like at some future time. Simply select a list of future times (derived from known schedules) and click preview to see the page from the new perspective.
Entities are managed via a plugin which utilizes OO to do its business, allowing entity-specific code to work. This is necessary as entities are not fully generic and we do not always know everything that is needed to know.
There is a hook_ers_entity_plugin_process(&$plugin, $info) that modules can use to modify information about an existing entity type plugin. This is most useful for adding additional paths that need to be handled, for example.
Currently the 'node' entity and the 'fieldable panel pane' entity are supported.
The module also integrates with the FAPE module.
This module sort of duplicates both Workbench Moderation and the Revision Scheduler module. It combines the two workflows into a single, highly integrated workflow.