ExportPDF

Changeset

4:4da7272243b5
2013-11-03 Paul Boddie raw files shortlog changelog graph Fixed revision export and added a check against the latest revision's ACL.
actions/ExportPDF.py (file)
     1.1 --- a/actions/ExportPDF.py	Fri Nov 01 17:07:09 2013 +0100
     1.2 +++ b/actions/ExportPDF.py	Sun Nov 03 02:11:12 2013 +0100
     1.3 @@ -9,6 +9,7 @@
     1.4  from MoinMoin import caching
     1.5  from MoinMoin.action import ActionBase, cache
     1.6  from MoinMoin.wikiutil import escape
     1.7 +from MoinMoin.Page import Page
     1.8  from MoinSupport import ActionSupport, escattr, getFormatterClass, formatText, get_send_headers
     1.9  from os.path import join
    1.10  import subprocess, os, codecs
    1.11 @@ -127,9 +128,11 @@
    1.12              "paper_size_label"      : escape(_("Paper size")),
    1.13              "paper_size_options"    : u"".join(paper_size_options),
    1.14              "buttons_html"          : buttons_html,
    1.15 +            "rev"                   : escattr(form.get("rev", ["0"])[0]),
    1.16              }
    1.17  
    1.18          return u"""\
    1.19 +<input name="rev" type="hidden" value="%(rev)s" />
    1.20  <table>
    1.21      <tr>
    1.22          <td class="label"><label>%(paper_size_label)s</label></td>
    1.23 @@ -150,6 +153,15 @@
    1.24          form = self.get_form()
    1.25          request = self.request
    1.26  
    1.27 +        # Permit other revisions, but only if the current revision is readable.
    1.28 +
    1.29 +        if not request.user.may.read(self.page.page_name):
    1.30 +            return 0, _("This page no longer allows read access.")
    1.31 +
    1.32 +        self.page = Page(request, self.page.page_name, rev=int(form.get("rev", ["0"])[0]))
    1.33 +
    1.34 +        # Check the paper size.
    1.35 +
    1.36          paper_size = form.get("paper-size", [""])[0]
    1.37  
    1.38          if not paper_size in self._get_paper_sizes() or []:
    1.39 @@ -157,7 +169,7 @@
    1.40  
    1.41          # See if the revision is cached.
    1.42  
    1.43 -        cache_key = cache.key(request, content="%s-%s" % (self.page.rev, paper_size))
    1.44 +        cache_key = cache.key(request, content="%s-%s" % (self.page.get_real_rev(), paper_size))
    1.45          cache_entry = caching.CacheEntry(request, self.page, cache_key, scope="item")
    1.46  
    1.47          # Open any available cache entry and read it.