Hi JSPWiki Developpers!
As I am preparing upgrade from 2.4 to 2.6, I list hereby the changes made to
two JSPWiki plugins:
1) RecentChangesPlugin where a new attribute "referring" allows to list
only changes to pages referring to a given page
2) ReferringPagesPlugin where I propose the same functionalities than the
one recently discussed (count, last modification date) but without adding
attributes to the existing Plugin.
If the specifications / examples below are appealing for the community, I will
forward the modifications made for 2.6 (after testing!)
Christophe
*** MODIFICATIONS TO ADD a referring='PageName' attribute to the RecentChanges
plugin ***
*** PageName can be {$username}: the pageName is Wikified.
*** List only pages recently changed that contains a link referring to a given
page (User page, category, etc.)
*** Allows a user to know the pages (s)he signed recently modified.
*** Example: !Changes to pages signed by [{$username}]:
*** [{INSERT com.ecyrd.jspwiki.plugin.RecentChangesPlugin
referring='{$username}'}]
Within src\com\ecyrd\jspwiki\plugin\RecentChangesPlugin.java, we add:
import java.security.Principal;
import com.ecyrd.jspwiki.ReferenceManager;
import com.ecyrd.jspwiki.parser.MarkupParser;
...
private static final String PARAM_REFERRING = "referring";
...
(((Within function execute, after:)))
//
// Which format we want to see?
//
if( "compact".equals( params.get(PARAM_FORMAT) ) )
{
spacing = 0;
showAuthor = false;
showChangenote = false;
}
(((Please Insert:)))
ReferenceManager mgr = engine.getReferenceManager();
Collection filterRef = null;
Object ptr = params.get(PARAM_REFERRING);
if (ptr != null) {
String pageName = (String) ptr;
if ("".equals(filterRef)||"{$username}".equals(pageName)) {
Principal currUser = context.getCurrentUser();
if (currUser != null) pageName = currUser.getName();
else pageName = null;
}
if (pageName != null) {
pageName = MarkupParser.cleanLink( pageName );
filterRef = mgr.findReferrers( pageName );
log.debug("Pages referring to "+pageName+" = "+filterRef);
}
}
(((BEFORE :if( !isSameDay( lastmod, olddate ) ) INSERT:)))
boolean accepted = true;
if (filterRef != null) accepted =
filterRef.contains(pageref.getName());
if (accepted) {
(((ADD A CLOSING } JUST AFTER THE COMMENT AFTER // Revert note )))
**** MODIFICATIONS TO ALLOW DISPLAY OF THE NUMBER OF REFERRING PAGES WITHOUT
THE LIST
**** AND TO ALLOW DISPLAY OF THE LAST MODIFICATION DATE.
**** max=0 : no list of pages
**** extras='... %d = number of pages ... %m = last modification date ...'
**** EXAMPLE: [{INSERT ReferringPagesPlugin max=0 extras='%d pages, last
modification: %m'}]:
(((WITHIN src\com\ecyrd\jspwiki\plugin\ReferringPagesPlugin.java, REPLACE the
following block of instructions: )))
if( links != null && (links.size() > 0) )
{
if (extras.indexOf("%m") >= 0) m_lastModified = true;
links = filterCollection( links );
wikitext = wikitizeCollection( links, m_separator, items );
if( (links.size() > 0) && (items < links.size()) && (items >=
0) )
{
extras = TextUtil.replaceString( extras, "%d",
""+(links.size()-items) );
extras = TextUtil.replaceString( extras, "%m",
""+(df.format(m_dateLastModified)) );
wikitext += extras;
}
}
//
// If nothing was left after filtering or during search
//
if( links == null || links.size() == 0 )
{
wikitext = "(no referring pages)\\\\";
}
*** MODIFICATION TO KNOW THE LAST MODIFICATION DATE WITHIN ReferringPagesPlugin
***
In src\com\ecyrd\jspwiki\plugin\AbstractReferralPlugin.java, we add:
import java.util.Date;
import java.text.SimpleDateFormat;
...
protected boolean m_lastModified=false;
// the last modified date of the page that has been last modified:
protected Date m_dateLastModified = new Date(0);
protected SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
(((before: protected WikiEngine m_engine;)))
...
(((ALSO CHANGE: )))
if( includeThis )
{
if (result.add( pageName )) {
// if we want to show the last modified date of the most
recently change page, we keep a "high watermark" here:
if (m_lastModified) {
WikiPage page = m_engine.getPage(pageName);
if (page!= null)
{
Date lastModPage = page.getLastModified();
if (lastModPage.after(m_dateLastModified)){
m_dateLastModified=lastModPage;
}
}
}
}
}
(((in place of:)))
if( includeThis )
{
result.add( pageName );
}