##// END OF EJS Templates
Makes the wiki sidebar editable (#5208)....
Jean-Philippe Lang -
r3518:58792737394c
parent child
Show More
@@ -33,7 +33,7 class WikiController < ApplicationController
33 33 page_title = params[:page]
34 34 @page = @wiki.find_or_new_page(page_title)
35 35 if @page.new_record?
36 if User.current.allowed_to?(:edit_wiki_pages, @project)
36 if User.current.allowed_to?(:edit_wiki_pages, @project) && editable?
37 37 edit
38 38 render :action => 'edit'
39 39 else
@@ -29,6 +29,12 class Wiki < ActiveRecord::Base
29 29 !user.nil? && user.allowed_to?(:view_wiki_pages, project)
30 30 end
31 31
32 # Returns the wiki page that acts as the sidebar content
33 # or nil if no such page exists
34 def sidebar
35 @sidebar ||= find_page('Sidebar', :with_redirect => false)
36 end
37
32 38 # find the page with the given title
33 39 # if page doesn't exist, return a new page
34 40 def find_or_new_page(title)
@@ -34,6 +34,10 class WikiContent < ActiveRecord::Base
34 34 page.project
35 35 end
36 36
37 def attachments
38 page.nil? ? [] : page.attachments
39 end
40
37 41 # Returns the mail adresses of users that should be notified
38 42 def recipients
39 43 notified = project.notified_users
@@ -41,6 +41,15 class WikiPage < ActiveRecord::Base
41 41 validates_uniqueness_of :title, :scope => :wiki_id, :case_sensitive => false
42 42 validates_associated :content
43 43
44 # Wiki pages that are protected by default
45 DEFAULT_PROTECTED_PAGES = %w(sidebar)
46
47 def after_initialize
48 if new_record? && DEFAULT_PROTECTED_PAGES.include?(title.to_s.downcase)
49 self.protected = true
50 end
51 end
52
44 53 def visible?(user=User.current)
45 54 !user.nil? && user.allowed_to?(:view_wiki_pages, project)
46 55 end
@@ -1,3 +1,7
1 <% if @wiki && @wiki.sidebar -%>
2 <%= textilizable @wiki.sidebar.content, :text %>
3 <% end -%>
4
1 5 <h3><%= l(:label_wiki) %></h3>
2 6
3 7 <%= link_to l(:field_start_page), {:action => 'index', :page => nil} %><br />
@@ -70,6 +70,17 class WikiControllerTest < ActionController::TestCase
70 70 :alt => 'This is a logo' }
71 71 end
72 72
73 def test_show_with_sidebar
74 page = Project.find(1).wiki.pages.new(:title => 'Sidebar')
75 page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
76 page.save!
77
78 get :index, :id => 1, :page => 'Another_page'
79 assert_response :success
80 assert_tag :tag => 'div', :attributes => {:id => 'sidebar'},
81 :content => /Side bar content for test_show_with_sidebar/
82 end
83
73 84 def test_show_unexistent_page_without_edit_right
74 85 get :index, :id => 1, :page => 'Unexistent page'
75 86 assert_response 404
@@ -33,11 +33,18 class WikiPageTest < ActiveSupport::TestCase
33 33 page.title = "Page"
34 34 assert page.save
35 35 page.reload
36 assert !page.protected?
36 37
37 38 @wiki.reload
38 39 assert @wiki.pages.include?(page)
39 40 end
40 41
42 def test_sidebar_should_be_protected_by_default
43 page = @wiki.find_or_new_page('sidebar')
44 assert page.new_record?
45 assert page.protected?
46 end
47
41 48 def test_find_or_new_page
42 49 page = @wiki.find_or_new_page("CookBook documentation")
43 50 assert_kind_of WikiPage, page
@@ -43,4 +43,23 class WikiTest < ActiveSupport::TestCase
43 43 assert_equal 'Page_title_with_CAPITALES', Wiki.titleize('page title with CAPITALES')
44 44 assert_equal 'テスト', Wiki.titleize('テスト')
45 45 end
46
47 context "#sidebar" do
48 setup do
49 @wiki = Wiki.find(1)
50 end
51
52 should "return nil if undefined" do
53 assert_nil @wiki.sidebar
54 end
55
56 should "return a WikiPage if defined" do
57 page = @wiki.pages.new(:title => 'Sidebar')
58 page.content = WikiContent.new(:text => 'Side bar content for test_show_with_sidebar')
59 page.save!
60
61 assert_kind_of WikiPage, @wiki.sidebar
62 assert_equal 'Sidebar', @wiki.sidebar.title
63 end
64 end
46 65 end
General Comments 0
You need to be logged in to leave comments. Login now