Edgewall Software

MacroBazaar: BackLinks.4.py

File BackLinks.4.py, 1.1 KB (added by trac@…, 6 years ago)

Updated Backlinks that only links CamelCase and wiki: links

Line 
1from StringIO import StringIO
2import re
3
4def 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()