Script - forum table

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.

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;
    }

Best way to use this is to save this script as a Global Template called ForumScript, and then put this in your page:

  {groovy:script=ForumScript|maxLength=10}

Log a request with our support team.

Confluence®, Jira®, Atlassian Bamboo®, Bitbucket®, Fisheye®, and Atlassian Crucible® are registered trademarks of Atlassian®
Copyright © 2005 - 2024 Appfire | All rights reserved. Appfire™, the 'Apps for makers™' slogan and Bob Swift Atlassian Apps™ are all trademarks of Appfire Technologies, LLC.