page_title = params[:page]
@page = @wiki.find_or_new_page(page_title)
if @page.new_record?
- if User.current.allowed_to?(:edit_wiki_pages, @project)
+ if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
edit
render :action => 'edit'
else
!user.nil? && user.allowed_to?(:view_wiki_pages, project)
end
+ # Returns the wiki page that acts as the sidebar content
+ # or nil if no such page exists
+ def sidebar
+ @sidebar ||= find_page('Sidebar', :with_redirect => false)
+ end
+
# find the page with the given title
# if page doesn't exist, return a new page
def find_or_new_page(title)
page.project
end
+ def attachments
+ page.nil? ? [] : page.attachments
+ end
+
# Returns the mail adresses of users that should be notified
def recipients
notified = project.notified_users
validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false
validates_associated :content
+ # Wiki pages that are protected by default
+ DEFAULT_PROTECTED_PAGES = %w(sidebar)
+
+ def after_initialize
+ if new_record? && DEFAULT_PROTECTED_PAGES.include?(title.to_s.downcase)
+ self.protected = true
+ end
+ end
+
def visible?(user=User.current)
!user.nil? && user.allowed_to?(:view_wiki_pages, project)
end
+<% if @wiki && @wiki.sidebar -%>
+ <%= textilizable @wiki.sidebar.content, :text %>
+<% end -%>
+
<h3><%= l(:label_wiki) %></h3>
<%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br />
:alt => 'This is a logo' }
end
+ def test_show_with_sidebar
+ page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
+ page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
+ page.save!
+
+ get :index, :id => 1, :page => 'Another_page'
+ assert_response :success
+ assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
+ :content => /Side bar content for test_show_with_sidebar/
+ end
+
def test_show_unexistent_page_without_edit_right
get :index, :id => 1, :page => 'Unexistent page'
assert_response 404
page.title = "Page"
assert page.save
page.reload
+ assert !page.protected?
@wiki.reload
assert @wiki.pages.include?(page)
end
+ def test_sidebar_should_be_protected_by_default
+ page = @wiki.find_or_new_page('sidebar')
+ assert page.new_record?
+ assert page.protected?
+ end
+
def test_find_or_new_page
page = @wiki.find_or_new_page("CookBook documentation")
assert_kind_of WikiPage, page
assert_equal 'Page_title_with_CAPITALES', Wiki.titleize('page title with CAPITALES')
assert_equal 'テスト', Wiki.titleize('テスト')
end
+
+ context "#sidebar" do
+ setup do
+ @wiki = Wiki.find(1)
+ end
+
+ should "return nil if undefined" do
+ assert_nil @wiki.sidebar
+ end
+
+ should "return a WikiPage if defined" do
+ page = @wiki.pages.new(:title => 'Sidebar')
+ page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
+ page.save!
+
+ assert_kind_of WikiPage, @wiki.sidebar
+ assert_equal 'Sidebar', @wiki.sidebar.title
+ end
+ end
end