]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/wiki.py
7 from . import ui_modules
9 class ActionUploadHandler(auth
.CacheMixin
, base
.BaseHandler
):
10 @tornado.web
.authenticated
12 path
= self
.get_argument("path")
15 filename
, data
, mimetype
= self
.get_file("file")
17 # XXX check valid mimetypes
19 with self
.db
.transaction():
20 file = self
.backend
.wiki
.upload(path
, filename
, data
,
21 mimetype
=mimetype
, author
=self
.current_user
,
22 address
=self
.get_remote_ip())
24 except TypeError as e
:
27 self
.redirect("%s/files" % path
)
30 class FilesHandler(auth
.CacheMixin
, base
.BaseHandler
):
31 @tornado.web
.authenticated
33 files
= self
.backend
.wiki
.get_files(path
)
35 self
.render("wiki/files/index.html", path
=path
, files
=files
)
38 class FileHandler(base
.BaseHandler
):
41 return self
.get_argument("action", None)
44 file = self
.backend
.wiki
.get_file_by_path(path
)
46 raise tornado
.web
.HTTPError(404, "Could not find %s" % path
)
49 if self
.action
== "detail":
50 self
.render("wiki/files/detail.html", file=file)
53 size
= self
.get_argument_int("s", None)
55 # Check if image should be resized
56 if file.is_image() and size
:
57 blob
= file.get_thumbnail(size
)
62 self
.set_header("Content-Type", file.mimetype
or "application/octet-stream")
63 self
.set_header("Content-Length", len(blob
))
66 self
.set_expires(3600)
72 class PageHandler(auth
.CacheMixin
, base
.BaseHandler
):
75 return self
.get_argument("action", None)
77 def write_error(self
, status_code
, **kwargs
):
78 # Render a custom page for 404
79 if status_code
== 404:
80 self
.render("wiki/404.html", **kwargs
)
83 # Otherwise raise this to one layer above
84 super().write_error(status_code
, **kwargs
)
86 @tornado.web
.removeslash
88 # Check if we are asked to render a certain revision
89 revision
= self
.get_argument("revision", None)
92 page
= self
.backend
.wiki
.get_page(page
, revision
=revision
)
95 if self
.action
== "edit":
96 if not self
.current_user
:
97 raise tornado
.web
.HTTPError(401)
99 # Empty page if it was deleted
100 if page
and page
.was_deleted():
104 self
.render("wiki/edit.html", page
=page
)
108 elif self
.action
== "revisions":
109 self
.render("wiki/revisions.html", page
=page
)
112 # If the page does not exist, we send 404
113 if not page
or page
.was_deleted():
114 raise tornado
.web
.HTTPError(404)
116 # Fetch the latest revision
117 latest_revision
= page
.get_latest_revision()
120 self
.render("wiki/page.html", page
=page
, latest_revision
=latest_revision
)
122 @tornado.web
.authenticated
123 def post(self
, page
):
124 content
= self
.get_argument("content", None)
125 changes
= self
.get_argument("changes")
127 # Create a new page in the database
128 with self
.db
.transaction():
129 page
= self
.backend
.wiki
.create_page(page
,
130 self
.current_user
, content
, changes
=changes
, address
=self
.get_remote_ip())
133 if page
.was_deleted():
136 self
.redirect(page
.url
)
138 # Update the search index
139 with self
.db
.transaction():
140 self
.backend
.wiki
.refresh()
143 class SearchHandler(auth
.CacheMixin
, base
.BaseHandler
):
146 q
= self
.get_argument("q")
148 pages
= self
.backend
.wiki
.search(q
, limit
=50)
150 self
.render("wiki/search-results.html", q
=q
, pages
=pages
)
153 class RecentChangesHandler(auth
.CacheMixin
, base
.BaseHandler
):
155 recent_changes
= self
.backend
.wiki
.get_recent_changes(limit
=50)
157 self
.render("wiki/recent-changes.html", recent_changes
=recent_changes
)
160 class WikiListModule(ui_modules
.UIModule
):
161 def render(self
, pages
, link_revision
=False, show_breadcrumbs
=True, show_changes
=False):
162 return self
.render_string("wiki/modules/list.html", link_revision
=link_revision
,
163 pages
=pages
, show_breadcrumbs
=show_breadcrumbs
, show_changes
=show_changes
)
166 class WikiNavbarModule(ui_modules
.UIModule
):
167 def render(self
, suffix
=None):
168 _
= self
.locale
.translate
170 breadcrumbs
= self
.backend
.wiki
.make_breadcrumbs(self
.request
.path
)
172 # Don't search for a title for the file manager
173 if self
.request
.path
.endswith("/files"):
176 title
= self
.backend
.wiki
.get_page_title(self
.request
.path
)
178 return self
.render_string("wiki/modules/navbar.html",
179 breadcrumbs
=breadcrumbs
, page_title
=title
, suffix
=suffix
)