[xwiki-users] Forum system that integrates with XWiki?
Trevor Cox
xwiki at skahasoftware.com
Mon Jul 17 23:20:27 CEST 2006
My procmail mailing list does not require any modification to XWiki. It
uses the existing capability of the mail plug-in to display messages
from an IMAP store. When messages arrive, I chose to access the database
directly using JDBC rather than invoke something like "wget
http://www.mywiki.com/..." for performance and reliability. I have seen
other people are interested in how to access the database from outside
of XWiki, so maybe this would be a useful example.
The command line java program is invoked with this shell script:
#!/bin/sh
java -cp
/usr/local/tomcat/common/lib/mysql-connector-java-3.1.7-bin.jar:. \
XWikiMail $1 $2 $3 $4
The command-line java program:
//
// A command-line program to extract the list of email addresses for an
XWiki Group.
// Trevor Cox
// Nov 9, 2005
// www.skahasoftware.com
//
import java.net.*;
import java.io.*;
import java.util.*;
import java.sql.*;
public class XWikiMail {
public XWikiMail() {}
public static void main(String[] params)
throws java.lang.Exception
{
if(params.length != 2) {
System.out.println(
"Usage: xwikimail <database> <group>\n");
throw new java.lang.Exception("Incorrect parameters");
}
String site=params[0];
String group=params[1];
String url = "jdbc:mysql://localhost/" + site;
String dbuser = "xwiki";
String dbpwd = "xwiki";
String query =
"select xws_value from xwikiobjects join xwikistrings on
xwo_id=xws_id "
+ " where xwo_name='XWiki." + group + "' and "
+ " xwo_classname='XWiki.XWikiGroups';";
Class.forName ("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, dbuser, dbpwd);
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery (query);
while ( rs.next() ) {
String member = rs.getString(1);
String query2 =
"select xws_value from xwikiobjects join xwikistrings on xwo_id
= xws_id"
+ " where xwo_name='" + member + "' and
xwo_classname='XWiki.XWikiUsers' and"
+ " xws_name='email';";
Statement stmt2 = con.createStatement ();
ResultSet rs2 = stmt2.executeQuery (query2);
while ( rs2.next() ) {
System.out.print(rs2.getString(1)+" ");
}
}
rs.close();
stmt.close();
con.close();
}
}
Here's a procmail rule that distributes mail sent to the mailing list
<group>@<wiki>.xwiki.com (I've simplified my original script for clarity).
:0
* ^(To|Cc):.*\/[a-z]+@[a-z]+\.xwiki\.com
{
GROUP=`echo $MATCH | sed s/@.*//`
SITE=`echo $MATCH | perl -pe "s/.*@([^\.]*).*/\1/;"`
XWIKISENDMAIL=`xwikimail $SITE $GROUP`
:0 c
$SITE.$GROUP # Store messages in folder like
mywiki.mygroup
:0
! $XWIKISENDMAIL
}
Trevor Cox
Skaha Software
jeremi joslin wrote:
> Hi,
> Nice, can you send us also a diff with your modification on the mail
> plugin. Can we integrate them in Xwiki?
>
> Jeremi
>
>
> On 7/17/06, Trevor Cox <xwiki at skahasoftware.com> wrote:
>
>> I have integrated a mailing list with XWiki. The mailing list is built
>> with procmail, which invokes a command line Java program to extract the
>> email addresses from the XWiki database and forward each message. All
>> the emails are archived in a IMAP folder which is viewed by this
>> template code:
>>
>>
>> <h3 class="heading-1">Mail Archive</h3>
>>
>> #set($user = "xxx")
>> #set($pass = "xxx")
>> #set($fldr = "${context.database}.listname")
>>
>> #set($store = $xwiki.mail.getStore("imap"))
>> $store.connect("localhost", $user, $pass)
>> #set($fldr = $store.getFolder($fldr))
>> $fldr.open(1)
>>
>> #set($msgnum = $parameterParser.getInt("msg",0))
>> #if($msgnum != 0)
>>
>> <a href="?">Message Index</a>
>>
>> \\
>>
>> #set($mail = $fldr.getMessage($msgnum))
>>
>> From:
>> #foreach($from in $mail.getHeader("from"))
>> $xwiki.getFormEncoded($from) #end
>> \\
>> To:
>> #foreach($from in $mail.getHeader("to")) $xwiki.getFormEncoded($from)
>> #end
>> \\
>> Subject: $xwiki.getFormEncoded($mail.subject) \\
>> Message:
>>
>> #if($mail.isMimeType("text/plain") || $mail.isMimeType("text/html"))
>> $mail.getContent()
>> #else
>> (Unable to display)
>> #end
>>
>> #else
>>
>> The following mail was sent to the list
>> during the past year:
>>
>> #set($count = $fldr.messageCount)
>> Showing $count of $count messages:
>>
>> <table class="wiki-table" cellpadding="0" cellspacing="0" border="0">
>> <tr class="table-odd">
>> <th>Subject</th><th>From</th><th>Date</th>
>> </tr>
>> #foreach ($i in [$fldr.messageCount..1])
>> #set($mail = $fldr.getMessage($i))
>> <tr>
>> <td>
>> <a
>> href="?msg=$mail.getMessageNumber()">$xwiki.getFormEncoded($mail.subject)</a>
>>
>> </td><td>
>> #set($froms = $mail.getHeader("from"))
>> #foreach($from in $froms) $xwiki.getFormEncoded($from) #end
>> </td><td>
>> #if($!mail.sentDate)
>> $formatter.formatShortDateTime($!mail.sentDate)
>> #end
>> </td>
>> </tr>
>> #end
>> </table>
>>
>> #end
>>
>> $store.close()
>>
>>
>>
>> Adrian Hall wrote:
>>
>> > Would you care to share the code?
>> >
>> >
>> >
>> > Thanks,
>> >
>> >
>> >
>> > -Adrian
>> >
>>
>>
>> --
>> Trevor Cox
>> skahasoftware.com
>> Vancouver, Canada
>>
>>
>>
>>
>>
>> --
>> You receive this message as a subscriber of the
>> xwiki-users at objectweb.org mailing list.
>> To unsubscribe: mailto:xwiki-users-unsubscribe at objectweb.org
>> For general help: mailto:sympa at objectweb.org?subject=help
>> ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>>
>>
>>
>
>
>------------------------------------------------------------------------
>
>
>--
>You receive this message as a subscriber of the xwiki-users at objectweb.org mailing list.
>To unsubscribe: mailto:xwiki-users-unsubscribe at objectweb.org
>For general help: mailto:sympa at objectweb.org?subject=help
>ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>
>
--
Trevor Cox
skahasoftware.com
Vancouver, Canada
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.xwiki.org/pipermail/users/attachments/20060717/57e59d9e/attachment-0001.html
More information about the users
mailing list