| 1 | from StringIO import StringIO |
|---|
| 2 | import re |
|---|
| 3 | |
|---|
| 4 | def execute(hdf, args, env): |
|---|
| 5 | db = env.get_db_cnx() |
|---|
| 6 | cursor = db.cursor() |
|---|
| 7 | |
|---|
| 8 | thispage = None |
|---|
| 9 | |
|---|
| 10 | if args: |
|---|
| 11 | thispage = args.replace('\'', '\'\'') |
|---|
| 12 | else : |
|---|
| 13 | thispage = hdf.getValue('wiki.page_name', '') |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | sql = 'SELECT w1.name FROM wiki w1, ' + \ |
|---|
| 17 | '(SELECT name, MAX(version) AS VERSION FROM WIKI GROUP BY NAME) w2 ' + \ |
|---|
| 18 | 'WHERE w1.version = w2.version AND w1.name = w2.name ' |
|---|
| 19 | |
|---|
| 20 | if thispage: |
|---|
| 21 | sql += 'AND ( w1.text LIKE \'%%[wiki:%s %%\' ' % thispage |
|---|
| 22 | |
|---|
| 23 | CamelCase = re.compile('^[A-Z][^A-Z].*[A-Z][^A-Z]') |
|---|
| 24 | if CamelCase.search( thispage ): |
|---|
| 25 | sql += 'OR w1.text LIKE \'%%%s%%\' ' % thispage |
|---|
| 26 | sql += ')' |
|---|
| 27 | |
|---|
| 28 | cursor.execute(sql) |
|---|
| 29 | |
|---|
| 30 | buf = StringIO() |
|---|
| 31 | |
|---|
| 32 | buf.write('Pages linking to %s:\n' % thispage) |
|---|
| 33 | buf.write('<ul>') |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | while 1: |
|---|
| 38 | row = cursor.fetchone() |
|---|
| 39 | if row == None: |
|---|
| 40 | break |
|---|
| 41 | if row[0] != thispage: |
|---|
| 42 | buf.write('<li><a href="%s">' % env.href.wiki(row[0])) |
|---|
| 43 | buf.write(row[0]) |
|---|
| 44 | buf.write('</a></li>\n') |
|---|
| 45 | |
|---|
| 46 | buf.write('</ul>') |
|---|
| 47 | |
|---|
| 48 | return buf.getvalue() |
|---|