diff MoinMoin/macro/WantedPages.py @ 0:77665d8e2254

tag of nonpublic@localhost--archive/moin--enterprise--1.5--base-0 (automatically generated log message) imported from: moin--main--1.5--base-0
author Thomas Waldmann <tw-public@gmx.de>
date Thu, 22 Sep 2005 15:09:50 +0000
parents
children 2202f548cbb0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MoinMoin/macro/WantedPages.py	Thu Sep 22 15:09:50 2005 +0000
@@ -0,0 +1,85 @@
+# -*- coding: iso-8859-1 -*-
+"""
+    MoinMoin - WantedPages Macro
+
+    @copyright: 2001 by Jürgen Hermann <jh@web.de>
+    @license: GNU GPL, see COPYING for details.
+"""
+
+import urllib
+from MoinMoin import config, wikiutil
+
+Dependencies = ["pages"]
+
+def execute(macro, args):
+    request = macro.request
+    _ = request.getText
+
+    # prevent recursion
+    if request.mode_getpagelinks: 
+        return ''   
+
+    # Get allpages switch from the form
+    allpages = int(request.form.get('allpages', [0])[0]) != 0
+    
+    # Control bar - filter the list of pages
+    # TODO: we should make this a widget and use on all page listing pages
+    controlbar = '''<div class="controlbar">
+<a href="%(qpagename)s?allpages=%(allpages)d">%(label)s</a>
+</div>''' % {
+        'qpagename': wikiutil.quoteWikinameURL(macro.formatter.page.page_name),
+        'allpages': not allpages,
+        'label': (_('Include system pages'), _('Exclude system pages'))[allpages],
+    }
+
+    # Get page dict readable by current user
+    pages = request.rootpage.getPageDict()
+
+    # build a dict of wanted pages
+    wanted = {}       
+    for name, page in pages.items():
+        # Skip system pages, because missing translations are not wanted pages,
+        # unless you are a translator and clicked "Include system pages"
+        if not allpages and wikiutil.isSystemPage(request, name):
+                continue
+        
+        # Add links to pages which does not exists in pages dict
+        links = page.getPageLinks(request)
+        for link in links:
+            if not pages.has_key(link):
+                if wanted.has_key(link):
+                    wanted[link][name] = 1
+                else:
+                    wanted[link] = {name: 1}
+
+    # Check for the extreme case when there are no wanted pages
+    if not wanted:
+        return u"%s<p>%s</p>" % (controlbar ,_("No wanted pages in this wiki."))
+
+    # Return a list of page links
+    wantednames = wanted.keys()
+    wantednames.sort()
+    result = []
+    result.append(macro.formatter.number_list(1))
+    for name in wantednames:
+        if not name: continue
+        result.append(macro.formatter.listitem(1))
+        # Add link to the wanted page
+        result.append(macro.formatter.pagelink(1, name, generated=1))
+        result.append(macro.formatter.text(name))
+        result.append(macro.formatter.pagelink(0, name))
+
+        # Add links to pages that want this page, highliting
+        # the link in those pages.
+        where = wanted[name].keys()
+        where.sort()
+        if macro.formatter.page.page_name in where:
+            where.remove(macro.formatter.page.page_name)
+        querystr='highlight=%s' % urllib.quote_plus(name.encode(config.charset))
+        wherelinks = [pages[pagename].link_to(request, querystr=querystr)
+                      for pagename in where]
+        result.append(": " + ', '.join(wherelinks))
+        result.append(macro.formatter.listitem(0))
+    result.append(macro.formatter.number_list(0))
+
+    return u'%s%s' % (controlbar, u''.join(result))