2016-01-16 13:24:13 +00:00
< ? php
register_module ([
" name " => " Recent Changes " ,
2016-04-03 14:31:50 +00:00
" version " => " 0.3 " ,
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
2016-04-03 14:58:49 +00:00
$recent_changes = json_decode ( file_get_contents ( $paths -> recentchanges ));
2016-01-16 13:51:25 +00:00
2016-04-03 14:58:49 +00:00
if ( count ( $recent_changes ) > 0 )
2016-01-16 13:24:13 +00:00
{
2016-04-03 14:58:49 +00:00
$content .= render_recent_changes ( $recent_changes );
2016-01-16 13:51:25 +00:00
}
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 ;
2016-04-03 14:27:50 +00:00
$newchange = [
" type " => " edit " ,
2016-01-16 13:24:13 +00:00
" timestamp " => time (),
" page " => $env -> page ,
" user " => $env -> user ,
" newsize " => $newsize ,
" sizediff " => $size_diff
2016-04-03 14:27:50 +00:00
];
if ( $oldsize == 0 )
$newchange [ " newpage " ] = true ;
2016-01-16 13:24:13 +00:00
2016-04-03 14:31:50 +00:00
add_recent_change ( $newchange );
2016-01-16 13:24:13 +00:00
});
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
}
]);
2016-04-03 14:31:50 +00:00
/**
* Adds a new recent change to the recent changes file .
* @ param array $rchange The new change to add .
*/
function add_recent_change ( $rchange )
{
global $settings , $paths ;
2016-04-03 14:43:40 +00:00
2016-04-03 14:31:50 +00:00
$recentchanges = json_decode ( file_get_contents ( $paths -> recentchanges ), true );
array_unshift ( $recentchanges , $rchange );
// 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-04-03 14:58:49 +00:00
function render_recent_changes ( $recentchanges )
{
$content = " <ul class='page-list'> \n " ;
foreach ( $recentchanges as $rchange )
{
$content .= render_recent_change ( $rchange );
}
$content .= " \t \t </ul> " ;
return $content ;
}
function render_recent_change ( $rchange )
{
// Render the page's name
$pageDisplayName = $rchange -> page ;
if ( isset ( $pageindex -> $pageDisplayName ) and ! empty ( $pageindex -> $pageDisplayName -> redirect ))
$pageDisplayName = " <em> $pageDisplayName </em> " ;
$editorDisplayHtml = " <span class='editor'>✎ $rchange->user </span> " ;
$timeDisplayHtml = " <time class='cursor-query' title=' " . date ( " l jS \ of F Y \ a \\ t h:ia T " , $rchange -> timestamp ) . " '> " . human_time_since ( $rchange -> timestamp ) . " </time> " ;
$result = " " ;
$resultClasses = [];
switch ( isset ( $rchange -> type ) ? $rchange -> type : " edit " )
{
case " edit " :
// 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 );
if ( ! empty ( $rchange -> newpage ))
$resultClasses [] = " newpage " ;
$result .= " <a href='?page= " . rawurlencode ( $rchange -> page ) . " '> $pageDisplayName </a> $editorDisplayHtml $timeDisplayHtml <span class=' $size_display_class ' title=' $title_display '>( $size_display )</span> " ;
break ;
case " deletion " :
$resultClasses [] = " deletion " ;
$result .= " $pageDisplayName $editorDisplayHtml $timeDisplayHtml " ;
}
$resultAttributes = " " . ( count ( $resultClasses ) > 0 ? " class=' " . implode ( " " , $resultClasses ) . " ' " : " " );
$result = " \t \t \t <li $resultAttributes > $result </li> \n " ;
return $result ;
}
2016-01-16 13:24:13 +00:00
?>