diff --git a/app/controllers/wiki_pages_api_controller.rb b/app/controllers/wiki_pages_api_controller.rb index a8bf15b366d..b3c77673952 100644 --- a/app/controllers/wiki_pages_api_controller.rb +++ b/app/controllers/wiki_pages_api_controller.rb @@ -504,7 +504,7 @@ class WikiPagesApiController < ApplicationController @set_front_page = true @set_as_front_page = true else - @page.workflow_state = 'unpublished' + @page.workflow_state = @wiki.grants_right?(@current_user, session, :manage) ? 'unpublished' : 'active' end end end diff --git a/app/views/shared/_wiki_sidebar.html.erb b/app/views/shared/_wiki_sidebar.html.erb index d300b2ac0e2..a74df4c8a9c 100644 --- a/app/views/shared/_wiki_sidebar.html.erb +++ b/app/views/shared/_wiki_sidebar.html.erb @@ -31,15 +31,17 @@ <% end %> <% end %> - <%= link_to t('links.new_page', "Link to a New Page"), polymorphic_url([@context, :wiki_page], action: :new), :id => 'new_page_link', :class => "add" %> -
+ <% if can_do(@wiki, @current_user, :create_page) %> + <%= link_to t('links.new_page', "Link to a New Page"), polymorphic_url([@context, :wiki_page], action: :new), :id => 'new_page_link', :class => "add" %> + + <% end %> <% end %> diff --git a/spec/selenium/student_wiki_and_tiny_spec.rb b/spec/selenium/student_wiki_and_tiny_spec.rb index dcd1a762845..41f8b99fe36 100644 --- a/spec/selenium/student_wiki_and_tiny_spec.rb +++ b/spec/selenium/student_wiki_and_tiny_spec.rb @@ -70,6 +70,39 @@ describe "Wiki pages and Tiny WYSIWYG editor" do expect(f('a.edit-wiki')).to be_displayed end + + it "should allow students to create new pages if enabled" do + @course.default_wiki_editing_roles = "teachers,students" + @course.save! + + get "/courses/#{@course.id}/pages" + wait_for_ajax_requests + f('.new_page').click + f("#title").send_keys("new page") + + expect_new_page_load { f('form.edit-form button.submit').click } + new_page = @course.wiki.wiki_pages.last + expect(new_page).to be_published + end + + it "should not allow students to add links to new pages unless they can create pages" do + create_wiki_page("test_page", false, "public") + get "/courses/#{@course.id}/pages/test_page/edit" + wait_for_ajax_requests + + expect(f('#new_page_link')).to be_nil + + @course.default_wiki_editing_roles = "teachers,students" + @course.save! + + get "/courses/#{@course.id}/pages/somenewpage/edit" # page that doesn't exist + wait_for_ajax_requests + + expect(f('#new_page_link')).to_not be_nil + expect_new_page_load { f('form.edit-form button.submit').click } + new_page = @course.wiki.wiki_pages.last + expect(new_page).to be_published + end it "should notify users when wiki page gets changed" do set_notification_policy