111 lines
4.0 KiB
Perl
111 lines
4.0 KiB
Perl
|
# Module of TWiki Enterprise Collaboration Platform, http://TWiki.org/
|
||
|
#
|
||
|
# Copyright (C) 1999-2007 Peter Thoeny, peter@thoeny.org
|
||
|
# and TWiki Contributors. All Rights Reserved. TWiki Contributors
|
||
|
# are listed in the AUTHORS file in the root of this distribution.
|
||
|
# NOTE: Please extend that file, not this notice.
|
||
|
#
|
||
|
# Additional copyrights apply to some or all of the code in this
|
||
|
# file as follows:
|
||
|
# Based on parts of Ward Cunninghams original Wiki and JosWiki.
|
||
|
# Copyright (C) 1998 Markus Peter - SPiN GmbH (warpi@spin.de)
|
||
|
# Some changes by Dave Harris (drh@bhresearch.co.uk) incorporated
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU General Public License
|
||
|
# as published by the Free Software Foundation; either version 2
|
||
|
# of the License, or (at your option) any later version. For
|
||
|
# more details read LICENSE in the root of this distribution.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
#
|
||
|
# As per the GPL, removal of this notice is prohibited.
|
||
|
|
||
|
package TWiki::UI::Changes;
|
||
|
|
||
|
use strict;
|
||
|
|
||
|
use TWiki;
|
||
|
use TWiki::Prefs;
|
||
|
use TWiki::Store;
|
||
|
use TWiki::UI;
|
||
|
use TWiki::Merge;
|
||
|
use TWiki::Time;
|
||
|
use Assert;
|
||
|
use Error qw( :try );
|
||
|
|
||
|
# Command handler for changes command
|
||
|
sub changes {
|
||
|
my $session = shift;
|
||
|
|
||
|
my $query = $session->{cgiQuery};
|
||
|
my $webName = $session->{webName};
|
||
|
my $topic = $session->{topicName};
|
||
|
|
||
|
TWiki::UI::checkWebExists( $session, $webName, $topic, 'find changes in' );
|
||
|
|
||
|
my $skin = $session->getSkin();
|
||
|
|
||
|
my $text = $session->{templates}->readTemplate( 'changes', $skin );
|
||
|
|
||
|
my( $page, $eachChange, $after) = split( /%REPEAT%/, $text );
|
||
|
|
||
|
my $changeData = $session->{store}->readMetaData( $webName, 'changes' );
|
||
|
my @changes = split( /\r?\n/, $changeData );
|
||
|
unless( $query->param( 'minor' )) {
|
||
|
@changes = grep { !/\tminor$/ } @changes;
|
||
|
my $comment = CGI::b( 'Note: ' ).
|
||
|
'This page is showing major changes only. '.
|
||
|
CGI::a( { href => $query->url()."/$webName?minor=1",
|
||
|
rel => 'nofollow' }, 'View all changes' );
|
||
|
$comment = CGI::span( { class => 'twikiHelp' }, $comment );
|
||
|
$page .= $comment;
|
||
|
}
|
||
|
my %done = ();
|
||
|
foreach my $change ( reverse @changes ) {
|
||
|
my( $changedTopic, $login, $time, $rev ) = split( /\t/, $change );
|
||
|
unless( $done{$changedTopic} ) {
|
||
|
next unless $session->{store}->topicExists( $webName, $changedTopic );
|
||
|
|
||
|
try {
|
||
|
my $summary = $session->{renderer}->summariseChanges(
|
||
|
$session->{user}, $webName, $changedTopic, $rev );
|
||
|
my $thisChange = $eachChange;
|
||
|
$thisChange =~ s/%TOPICNAME%/$changedTopic/go;
|
||
|
my $u = $session->{users}->findUser( $login );
|
||
|
my $wikiuser = $u ? $u->webDotWikiName() : '';
|
||
|
$thisChange =~ s/%AUTHOR%/$wikiuser/go;
|
||
|
$time = TWiki::Time::formatTime( $time );
|
||
|
$rev = 1 unless $rev;
|
||
|
my $srev = 'r' . $rev;
|
||
|
if( $rev == 1 ) {
|
||
|
$srev = CGI::span( { class => 'twikiNew' }, 'NEW' );
|
||
|
}
|
||
|
$thisChange =~ s/%TIME%/$time/g;
|
||
|
$thisChange =~ s/%REVISION%/$srev/go;
|
||
|
$thisChange = $session->{renderer}->getRenderedVersion
|
||
|
( $thisChange, $webName, $changedTopic );
|
||
|
$thisChange =~ s/%TEXTHEAD%/$summary/go;
|
||
|
$page .= $thisChange;
|
||
|
} catch TWiki::AccessControlException with {
|
||
|
# ignore changes we can't see
|
||
|
};
|
||
|
$done{$changedTopic} = 1;
|
||
|
}
|
||
|
}
|
||
|
if( $TWiki::cfg{Log}{changes} ) {
|
||
|
# write log entry
|
||
|
$session->writeLog( 'changes', $webName, '' );
|
||
|
}
|
||
|
$page .= $after;
|
||
|
|
||
|
$page = $session->handleCommonTags( $page, $webName, $topic );
|
||
|
$page = $session->{renderer}->getRenderedVersion($page, $webName, $topic );
|
||
|
|
||
|
$session->writeCompletePage( $page );
|
||
|
}
|
||
|
|
||
|
1;
|