]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/wiki.py
wiki: Fix handling @ in links
[ipfire.org.git] / src / backend / wiki.py
index 9bddc32b680e10972e53b84d4209bfad27c66777..817f81c82e17e7257a0b243b97de4aa4a737c863 100644 (file)
@@ -23,6 +23,14 @@ class Wiki(misc.Object):
                if res:
                        return Page(self.backend, res.id, data=res)
 
+       def __iter__(self):
+               return self._get_pages(
+                       "SELECT wiki.* FROM wiki_current current \
+                               LEFT JOIN wiki ON current.id = wiki.id \
+                               WHERE current.deleted IS FALSE \
+                               ORDER BY page",
+               )
+
        def make_path(self, page, path):
                # Nothing to do for absolute links
                if path.startswith("/"):
@@ -445,9 +453,13 @@ class Page(misc.Object):
                        self.backend.messages.send_template("wiki/messages/page-changed",
                                account=watcher, page=self, priority=-10)
 
-       def restore(self, author, address):
+       def restore(self, author, address, comment=None):
                changes = "Restore to revision from %s" % self.timestamp.isoformat()
 
+               # Append comment
+               if comment:
+                       changes = "%s: %s" % (changes, comment)
+
                return self.backend.wiki.create_page(self.page,
                        author, self.markdown, changes=changes, address=address)
 
@@ -507,7 +519,7 @@ class File(misc.Object):
 
        def get_revisions(self):
                revisions = self.backend.wiki._get_files("SELECT * FROM wiki_files \
-                       WHERE path = %s ORDER BY created_at DESC", self.path)
+                       WHERE path = %s AND filename = %s ORDER BY created_at DESC", self.path, self.filename)
 
                return list(revisions)
 
@@ -517,6 +529,12 @@ class File(misc.Object):
        def is_image(self):
                return self.mimetype.startswith("image/")
 
+       def is_vector_image(self):
+               return self.mimetype in ("image/svg+xml",)
+
+       def is_bitmap_image(self):
+               return self.is_image() and not self.is_vector_image()
+
        @lazy_property
        def blob(self):
                res = self.db.get("SELECT data FROM wiki_blobs \
@@ -526,6 +544,8 @@ class File(misc.Object):
                        return bytes(res.data)
 
        def get_thumbnail(self, size):
+               assert self.is_bitmap_image()
+
                cache_key = "-".join((self.path, util.normalize(self.filename), self.created_at.isoformat(), "%spx" % size))
 
                # Try to fetch the data from the cache
@@ -566,6 +586,12 @@ class WikiRenderer(misc.Object):
        def _render_link(self, m):
                url, text = m.groups()
 
+               # External Links
+               for schema in self.schemas:
+                       if url.startswith(schema):
+                               return """<a class="link-external" href="%s">%s</a>""" % \
+                                       (url, text or url)
+
                # Emails
                if "@" in url:
                        # Strip mailto:
@@ -575,12 +601,6 @@ class WikiRenderer(misc.Object):
                        return """<a class="link-external" href="mailto:%s">%s</a>""" % \
                                (url, text or url)
 
-               # External Links
-               for schema in self.schemas:
-                       if url.startswith(schema):
-                               return """<a class="link-external" href="%s">%s</a>""" % \
-                                       (url, text or url)
-
                # Everything else must be an internal link
                path = self.backend.wiki.make_path(self.path, url)