Page will try to render itself in revise method, and behave appropriately if markup engine fails [inspired by Denis]
This commit is contained in:
parent
2e9e82bd0a
commit
85bc93984d
|
@ -94,9 +94,15 @@ class FileController < ApplicationController
|
||||||
page_content = entry.get_input_stream.read
|
page_content = entry.get_input_stream.read
|
||||||
logger.info "Processing page '#{page_name}'"
|
logger.info "Processing page '#{page_name}'"
|
||||||
begin
|
begin
|
||||||
if @wiki.read_page(@web.address, page_name)
|
existing_page = @wiki.read_page(@web.address, page_name)
|
||||||
logger.info "Page '#{page_name}' already exists. Adding a new revision to it."
|
if existing_page
|
||||||
wiki.revise_page(@web.address, page_name, page_content, Time.now, @author)
|
if existing_page.content == page_content
|
||||||
|
logger.info "Page '#{page_name}' with the same content already exists. Skipping."
|
||||||
|
next
|
||||||
|
else
|
||||||
|
logger.info "Page '#{page_name}' already exists. Adding a new revision to it."
|
||||||
|
wiki.revise_page(@web.address, page_name, page_content, Time.now, @author)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
wiki.write_page(@web.address, page_name, page_content, Time.now, @author)
|
wiki.write_page(@web.address, page_name, page_content, Time.now, @author)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Page
|
||||||
raise Instiki::ValidationError.new(
|
raise Instiki::ValidationError.new(
|
||||||
"You have tried to save page '#{name}' without changing its content")
|
"You have tried to save page '#{name}' without changing its content")
|
||||||
end
|
end
|
||||||
|
|
||||||
# A user may change a page, look at it and make some more changes - several times.
|
# A user may change a page, look at it and make some more changes - several times.
|
||||||
# Not to record every such iteration as a new revision, if the previous revision was done
|
# Not to record every such iteration as a new revision, if the previous revision was done
|
||||||
# by the same author, not more than 30 minutes ago, then update the last revision instead of
|
# by the same author, not more than 30 minutes ago, then update the last revision instead of
|
||||||
|
@ -33,8 +33,14 @@ class Page
|
||||||
else
|
else
|
||||||
@revisions << Revision.new(self, @revisions.length, content, created_at, author)
|
@revisions << Revision.new(self, @revisions.length, content, created_at, author)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
self.revisions.last.force_rendering
|
||||||
|
# at this point the page may not be inserted in the web yet, and therefore
|
||||||
|
# references to the page itself are rendered as "unresolved". Clearing the cache allows
|
||||||
|
# the page to re-render itself once again, hopefully _after_ it is inserted in the web
|
||||||
|
self.revisions.last.clear_display_cache
|
||||||
|
|
||||||
web.refresh_pages_with_references(name) if @revisions.length == 1
|
web.refresh_pages_with_references(@name) if @revisions.length == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
def rollback(revision_number, created_at, author_ip = nil)
|
def rollback(revision_number, created_at, author_ip = nil)
|
||||||
|
@ -79,14 +85,16 @@ class Page
|
||||||
web.make_link(author, nil, options)
|
web.make_link(author, nil, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
def continous_revision?(created_at, author)
|
|
||||||
@revisions.last.author == author && @revisions.last.created_at + 30.minutes > created_at
|
|
||||||
end
|
|
||||||
|
|
||||||
# Forward method calls to the current revision, so the page responds to all revision calls
|
private
|
||||||
def method_missing(method_symbol)
|
|
||||||
revisions.last.send(method_symbol)
|
def continous_revision?(created_at, author)
|
||||||
end
|
@revisions.last.author == author && @revisions.last.created_at + 30.minutes > created_at
|
||||||
|
end
|
||||||
|
|
||||||
|
# Forward method calls to the current revision, so the page responds to all revision calls
|
||||||
|
def method_missing(method_symbol)
|
||||||
|
revisions.last.send(method_symbol)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -79,5 +79,21 @@ class Revision
|
||||||
def display_content_for_export
|
def display_content_for_export
|
||||||
WikiContent.new(self, {:mode => :export} )
|
WikiContent.new(self, {:mode => :export} )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def force_rendering
|
||||||
|
begin
|
||||||
|
display_content
|
||||||
|
rescue Exception => e
|
||||||
|
ApplicationController.logger.error "Failed rendering page #{@name}"
|
||||||
|
ApplicationController.logger.error e
|
||||||
|
message = e.message.gsub(/\n/, '<br/>')
|
||||||
|
# substitute content with an error message
|
||||||
|
content = <<-EOL
|
||||||
|
<p>Markup engine has failed to render this page, raising the following error:</p>
|
||||||
|
<p>#{message}</p>
|
||||||
|
EOL
|
||||||
|
raise e
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue