Wiki Markup |
---|
{gliffy:name=,io,|space=CONFEXT|page=Script - forum table|pageid=46104655|align=left|size=L}
This is a groovy script that gets all the current blog posts in the space, sorts them according to the last comment, and outputs in a forum like table. (More forum like than the blogposts macro anyway). Only parameter is "maxLength". Would be fairly easy to add paging and categorization based on labels.
I wrote this as a script because I couldn't be bothered compiling it into a jar, and its also easier to customise to your needs.
{code}
import com.atlassian.confluence.util.*;
import com.atlassian.user.User;
class ForumRow {
String thread;
String author;
int replies;
String lastPost;
}
int maxL = 50;
if (maxLength!=null)
maxL = Integer.parseInt(maxLength);
out.println("<style>.silverborder { border:1px solid silver;border-collapse:collapse }</style><table border=1 class='grid' style='width:100%;border:1px solid silver;border-collapse:collapse' cellpadding=2 ><tr><th>Thread</th><th>Author</th><th>Replies</th><th>Last Post</th></tr>");
List list = context.getEntity().getSpace().getCurrentBlogPosts();
Map map = new TreeMap();
for (b in list)
{
ForumRow fr = new ForumRow();
fr.thread = "<a href=\'" + contextPath + b.urlPath + "\' >" + GeneralUtil.htmlEncode(b.title ) + "</a>";
fr.author = getUserFullName( b.lastModifierName );
fr.replies = b.comments.size();
fr.lastPost = formatDate(b.lastModificationDate) + "<br>Created by " + fr.author;
Date d = b.lastModificationDate;
for (comment in b.comments )
{
Date cd = comment.lastModificationDate;
if (cd.time > d.time )
{
d = cd;
fr.lastPost = formatDate(d) + "<br>Reply by " + getUserFullName(comment.creatorName);
}
}
map.put(-d.time,fr);
}
int i=0;
for (e in map )
{
if (i%2==0)
out.println("<tr>");
else
out.println("<tr style='background-color:#F9FAFC'>");
out.println("<td class='silverborder' >" + e.value.thread+ "</td>");
out.println("<td class='silverborder' >" + e.value.author+ "</td>");
out.println("<td class='silverborder' >" + e.value.replies + "</td>");
out.println("<td class='silverborder' >" + e.value.lastPost + "</td>");
out.println("</tr>");
i++;
if (i>=maxL)
break;
}
out.println("</table>");
public String getUserFullName(String username)
{
if (username==null)
return "Anonymous";
User user = GeneralUtil.getUserAccessor().getUser(username);
return (user != null) ? user.fullName : "Anonymous";
}
public String formatDate(Date date)
{
String ret = GeneralUtil.formatDateTime(date);
if ( (new Date()).time - date.time < 86400000L )
ret = "<span style=color:red >" + ret + "</span>";
else if ( (new Date()).time - date.time < 86400000L *4 )
ret = "<span style=color:blue >" + ret + "</span>";
return ret;
}
{code}
Best way to use this is to save this script as a Global Template called ForumScript, and then put this in your page:
{code}
{groovy:script=ForumScript|maxLength=10}
{code}
|
Page Comparison
General
Content
Integrations
App links