2016-01-16 13:24:13 +00:00
< ? php
register_module ([
" name " => " Recent Changes " ,
2016-04-02 20:21:34 +00:00
" version " => " 0.2.1 " ,
2016-01-16 13:24:13 +00:00
" author " => " Starbeamrainbowlabs " ,
" description " => " Adds recent changes. Access through the 'recent-changes' action. " ,
" id " => " feature-recent-changes " ,
" code " => function () {
global $settings , $env , $paths ;
// Add the recent changes json file to $paths for convenience.
$paths -> recentchanges = $env -> storage_prefix . " recent-changes.json " ;
// Create the recent changes json file if it doesn't exist
if ( ! file_exists ( $paths -> recentchanges ))
file_put_contents ( $paths -> recentchanges , " [] " );
/*
* ██████ ███████ ██████ ███████ ███ ██ ████████
* ██ ██ ██ ██ ██ ████ ██ ██
* ██████ █████ ██ █████ ██ ██ ██ ██
* ██ ██ ██ ██ ██ ██ ██ ██ ██
* ██ ██ ███████ ██████ ███████ ██ ████ ██
*
* ██████ ██ ██ █████ ███ ██ ██████ ███████ ███████
* ██ ██ ██ ██ ██ ████ ██ ██ ██ ██
* ██ ███████ ███████ ██ ██ ██ ██ ███ █████ ███████
* ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
* ██████ ██ ██ ██ ██ ██ ████ ██████ ███████ ███████
*/
add_action ( " recent-changes " , function () {
2016-03-21 16:21:09 +00:00
global $settings , $paths , $pageindex ;
2016-01-16 13:24:13 +00:00
2016-01-16 13:51:25 +00:00
$content = " \t \t <h1>Recent Changes</h1> \n " ;
2016-01-16 13:24:13 +00:00
$recentchanges = json_decode ( file_get_contents ( $paths -> recentchanges ));
2016-01-16 13:51:25 +00:00
if ( count ( $recentchanges ) > 0 )
2016-01-16 13:24:13 +00:00
{
2016-01-16 13:51:25 +00:00
$content .= " <ul class='page-list'> \n " ;
foreach ( $recentchanges as $rchange )
{
// The number (and the sign) of the size difference to display
$size_display = ( $rchange -> sizediff > 0 ? " + " : " " ) . $rchange -> sizediff ;
$size_display_class = $rchange -> sizediff > 0 ? " larger " : ( $rchange -> sizediff < 0 ? " smaller " : " nochange " );
if ( $rchange -> sizediff > 500 or $rchange -> sizediff < - 500 )
$size_display_class .= " significant " ;
$title_display = human_filesize ( $rchange -> newsize - $rchange -> sizediff ) . " -> " . human_filesize ( $rchange -> newsize );
2016-03-21 16:21:09 +00:00
$pageDisplayName = $rchange -> page ;
2016-04-02 12:49:45 +00:00
if ( isset ( $pageindex -> $pageDisplayName ) and ! empty ( $pageindex -> $pageDisplayName -> redirect ))
2016-03-21 16:21:09 +00:00
$pageDisplayName = " <em> $pageDisplayName </em> " ;
$content .= " \t \t \t <li><a href='?page= " . rawurlencode ( $rchange -> page ) . " '> $pageDisplayName </a> <span class='editor'>✎ $rchange->user </span> <time class='cursor-query' title=' " . date ( " l jS \ of F Y \ a \\ t h:ia T " , $rchange -> timestamp ) . " '> " . human_time_since ( $rchange -> timestamp ) . " </time> <span class=' $size_display_class ' title=' $title_display '>( $size_display )</span></li> \n " ;
2016-01-16 13:51:25 +00:00
}
$content .= " \t \t </ul> " ;
}
else
{
// No changes yet :(
$content .= " <p><em>None yet! Try making a few changes and then check back here.</em></p> \n " ;
2016-01-16 13:24:13 +00:00
}
echo ( page_renderer :: render ( " Recent Changes - $settings->sitename " , $content ));
});
register_save_preprocessor ( function ( & $pageinfo , & $newsource , & $oldsource ) {
global $env , $settings , $paths ;
// Work out the old and new page lengths
$oldsize = strlen ( $oldsource );
$newsize = strlen ( $newsource );
// Calculate the page length difference
$size_diff = $newsize - $oldsize ;
$recentchanges = json_decode ( file_get_contents ( $paths -> recentchanges ), true );
2016-01-16 13:51:25 +00:00
array_unshift ( $recentchanges , [
2016-01-16 13:24:13 +00:00
" timestamp " => time (),
" page " => $env -> page ,
" user " => $env -> user ,
" newsize " => $newsize ,
" sizediff " => $size_diff
2016-01-16 13:51:25 +00:00
]);
2016-01-16 13:24:13 +00:00
// Limit the number of entries in the recent changes file if we've
// been asked to.
if ( isset ( $settings -> max_recent_changes ))
$recentchanges = array_slice ( $recentchanges , - $settings -> max_recent_changes );
// Save the recent changes file back to disk
file_put_contents ( $paths -> recentchanges , json_encode ( $recentchanges , JSON_PRETTY_PRINT ));
});
2016-03-21 16:21:09 +00:00
add_help_section ( " 800-raw-page-content " , " Recent Changes " , " <p>The <a href='?action=recent-changes'>recent changes</a> page displays a list of all the most recent changes that have happened around $settings->sitename , arranged in chronological order. It can be found in the \" More... \" menu in the top right by default.</p>
< p > Each entry displays the name of the page in question , who edited it , how long ago they did so , and the number of characters added or removed . Pages that < em > currently </ em > redirect to another page are shown in italics , and hovering over the time since the edit wil show the exact time that the edit was made .</ p > " );
2016-01-16 13:24:13 +00:00
}
]);
?>