# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - "ViewTrackbacks" action

    @copyright: 2004 by Jos Yule <jos@theorganization.net>
    @license: GNU GPL, see COPYING for details.
"""

from MoinMoin import config, util, wikiutil
from MoinMoin.Page import Page
from xml.sax.handler import ContentHandler
from time import strftime, strptime
import xml.sax

class countHandler(ContentHandler):
    def __init__(self):
        self.pings = []
        self.inItem = 0
        self.currentElement = ''
        self.currentPing = {}
        
    def startElement(self, qname, attr):
        self.currentElement = qname
        if qname == 'item':
            #print 'Start Item'
            self.currentPing = {}
            self.inItem = 1
        
    def characters(self, s):
        if self.inItem == 1:
            self.currentPing[self.currentElement] = s

    def endElement(self, qname):
        if qname == 'item':
            #print 'End Item'
            self.pings.append(self.currentPing)
            self.inItem = 0


        

def execute(pagename, request):
    _ = request.getText
    #get data directory
    tbFile = config.data_dir + "/trackback/" + wikiutil.quoteFilename(pagename) + ".xml"
    aMsg = ''


    parser = xml.sax.make_parser()
    handler = countHandler()
    parser.setContentHandler(handler)
    try:
        parser.parse(tbFile)
        for ping in handler.pings:

            strTemplate = """<p><strong><a href="%s">%s</a></strong>
            <blockquote>%s</blockquote>
            on %s from %s"""

            aMsg = strTemplate % (ping.get("link"), ping.get("title", "No title"), ping.get("description", ''),  strftime("%c",strptime(ping.get("date"),"%Y-%m-%dT%H:%MZ")),  ping.get("blogName", ping.get("link"))) + aMsg


    except Exception, x:
        pass

    request.http_headers()
    wikiutil.send_title(request, _('Trackbacks for page "%s".') % (pagename,) , pagename=pagename)
        
    request.write('<div id="content">\n') # start content div
    request.write(aMsg)
    request.write('</div>\n') # end content div

    wikiutil.send_footer(request, pagename)

