BackLinks.5.py

Here I'll describe how to install BackLinks.5.py for Trac. I've tested it on Trac 0.10.4 and it works fine.

  1. Download the script here
  2. Put the script into your /usr/share/trac/wiki-macros/ and rename it to BackLinks.py
  3. Restart the apache2/tracd server, if needed.

The Python script listing follows:

PYTHON:
  1. #
  2. # BackLinks plugin for Trac
  3. # Version: 5.0
  4. #
  5. # Author: Trapanator trap@trapanator.com
  6. # Website: http://www.trapanator.com/blog/archives/category/trac
  7. # License: GPL 3.0
  8. #
  9. from StringIO import StringIO
  10. def execute(hdf, args, env):
  11.     db = env.get_db_cnx()
  12.     cursor = db.cursor()
  13.     thispage = None
  14.     if args:
  15.         thispage = args.replace('\'', '\'\'')
  16.     else:
  17.         thispage = hdf.getValue('wiki.page_name', '')
  18.     sql = 'SELECT w1.name FROM wiki w1, ' + \
  19.           '(SELECT name, MAX(version) AS VERSION FROM WIKI GROUP BY NAME) w2 ' + \
  20.           'WHERE w1.version = w2.version AND w1.name = w2.name '
  21.     if thispage:
  22.             sql += 'AND (w1.text LIKE \'%%[wiki:%s %%\' ' % (unicode(thispage, "utf-8").encode ("utf-8"))
  23.             sql += 'OR w1.text LIKE \'%%[wiki:%s]%%\')' % (unicode (thispage, "utf-8").encode ("utf-8"))
  24.     cursor.execute(sql)
  25.     buf = StringIO()
  26.     buf.write('<hr style="width: 10%; padding: 0; margin: 2em 0 1em 0;"/>')
  27.     buf.write('Pages linking to %s:\n' % (unicode (thispage, "utf-8")))
  28.     buf.write('<ul>')
  29.     while 1:
  30.         row = cursor.fetchone()
  31.         if row == None:
  32.             break
  33.         s2 = unicode (thispage, "utf-8")
  34.         if row[0] == s2:
  35.             pass
  36.         else:
  37.             buf.write('<li><a href="%s">' % env.href.wiki(row[0]))
  38.             buf.write(row[0])
  39.             buf.write('</a></li>\n')
  40.     buf.write('</ul>')
  41.     return buf.getvalue()

Leave a Reply