PageHist
Questions answered by this recipe
- How can I view pages "as of" a certain time, in other words to see a snapshot from a given time
Description
View information about page revisions and view page(s) "as of" a particular point in time.
Installation
- Download pagehist.phpΔ and place it in the cookbook directory
- Add
include_once("
to your config.php$FarmD
/cookbook/pagehist.php");
Notes
By appending "?asof=TIMESTAMP" to the URL in your address bar you can view a page as of that particular point in time. An effort is made to append the same "?asof=TIMESTAMP" to all intra-wiki links automatically (once you have explicitly requested the first one) so that you can actually browse your site as of that point in time.
A markup expression is also provided with lots of options to list the revisions of a given page.
Here is perhaps the most useful version of this MX:
{(pagehist fmt="{name} as of %m/%d/%Y %T" links=1 count=10 Group.Pagename)}
This will list the last 10 revisions of Group.Pagename in the format "Group.Pagename as of 04/07/2009 10:01:31" and that text will be a link pointing to "Group.Pagename?asof=12342345", thus allowing you to go directly to the view of that page as of that point in time.
The {(pagehist ...)}
MX also supports a bunch of other options.
sep=x | change the separator between elements |
n=1 | include name as an element |
a=1 | include author as an element |
u=1 | include unixtime as an element |
fmt=X | specify the format to be used ({name}, {author}, {host}, {desc}, {diff}, or any strftime elements will be substituted ) |
h=1 | include host as an element |
l=1 | include # of lines in diff output as an element |
s=1 | include # of chars in diff output as an element |
d=1 | include description of change as an element |
t=1 | set fmt to '%Y-%m-%d %T' |
count=x | only list the x most recent revisions |
start=x | only list revisions occurring after x (x can be either unixtime or input to strtotime()) |
end=x | only list revisions occurring before x (x can be either unixtime or input to strtotime()) |
table=1 | put || before and after each line with || as separator to form a table |
links=1 | make each line into a link to that page with the appropriate ?asof=12341234 in the URL |
only_pagehist=1 | don't do ANYTHING unless ?pagehist=1 is found in the URL |
line_prefix=X | put X in front of every line of output |
line_suffix=X | put X after every line of output |
Obviously pagehist can be used within WikiSh in which case you can use usage such as pagehist -ud
to specify the unixtime and the description -- this is where the single-letter options become much more useful.
The following script gives an idea of how @@pagehist could be integrated into WikiSh and manipulation of page revisions could be done very powerfully (don't forget the existence of the diff command as well):
pagehist -ud Pagename | while read timestamp desc do echo "----\n${desc}\n----" cat Pagename@${timestamp} done
You can also specify ?asof=<timestamp in words>
in your URL where <timestamp in words> is any words which correspond to valid input for strtotime(). However, this feature hasn't been as well tested and may break on links and etc.
Note that everything in your site will be viewed as of this particular date. This means (:include:) will include the version as of that time, and etc. It also means that if your account in authuser was added after that time then you're potentially going to have problems. To get around this difficulty there is a global variable $PageHistIgnorePages which can be set to an array of pagenames (group period pagename) and these pages will be ignored (i.e., they will always be read as of the current snapshot rather than as of the date being used for other pages). It defaults to no pages being ignored -- in other words all pages will be viewed as of the time specified in the URL.
This recipe is only active if the action is "browse" or "source". This can be changed by changing the global variable $PageHistActions
.
Release Notes
- 2009-04-18B - added
$PageHistIgnorePages
- 2009-04-18 - Initial release. Consider it "played with" rather than "tested."
See Also
- ViewDiff Compare arbitrary revisions and view a particular version.
Contributors
Comments
See discussion at PageHist-Talk?
User notes? : If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.