Feature #1040 » draft-feature-1040-r20825.patch
app/controllers/wiki_controller.rb | ||
---|---|---|
33 | 33 |
# TODO: still being worked on |
34 | 34 |
class WikiController < ApplicationController |
35 | 35 |
default_search_scope :wiki_pages |
36 |
before_action :find_wiki, :authorize |
|
36 |
before_action :find_wiki, :authorize_global
|
|
37 | 37 |
before_action :find_existing_or_new_page, :only => [:show, :edit] |
38 | 38 |
before_action :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy, :destroy_version] |
39 | 39 |
before_action :find_attachments, :only => [:preview] |
... | ... | |
41 | 41 | |
42 | 42 |
helper :attachments |
43 | 43 |
include AttachmentsHelper |
44 |
include WikiHelper |
|
44 | 45 |
helper :watchers |
45 | 46 |
include Redmine::Export::PDF |
46 | 47 | |
47 | 48 |
# List of pages, sorted alphabetically and by parent (hierarchy) |
48 | 49 |
def index |
50 |
authorize if params[:project_id] |
|
49 | 51 |
load_pages_for_index |
50 | 52 | |
51 | 53 |
respond_to do |format| |
... | ... | |
72 | 74 |
@page.title = '' unless editable? |
73 | 75 |
@page.validate |
74 | 76 |
if @page.errors[:title].blank? |
75 |
path = project_wiki_page_path(@project, @page.title, :parent => params[:parent])
|
|
77 |
path = wiki_page_action_path('show', @page, {:parent => params[:parent]})
|
|
76 | 78 |
respond_to do |format| |
77 | 79 |
format.html {redirect_to path} |
78 | 80 |
format.js {render :js => "window.location = #{path.to_json}"} |
... | ... | |
83 | 85 | |
84 | 86 |
# display a page (in editing mode if it doesn't exist) |
85 | 87 |
def show |
86 |
if params[:version] && !User.current.allowed_to?(:view_wiki_edits, @project)
|
|
88 |
if params[:version] && !@wiki.allowed_to_permission?(:view_wiki_edits)
|
|
87 | 89 |
deny_access |
88 | 90 |
return |
89 | 91 |
end |
90 | 92 |
@content = @page.content_for_version(params[:version]) |
91 | 93 |
if @content.nil? |
92 |
if User.current.allowed_to?(:edit_wiki_pages, @project) && editable? && !api_request?
|
|
94 |
if @wiki.allowed_to_permission?(:view_wiki_edits) && editable? && !api_request?
|
|
93 | 95 |
edit |
94 | 96 |
render :action => 'edit' |
95 | 97 |
else |
... | ... | |
186 | 188 |
respond_to do |format| |
187 | 189 |
format.html do |
188 | 190 |
anchor = @section ? "section-#{@section}" : nil |
189 |
redirect_to project_wiki_page_path(@project, @page.title, :anchor => anchor)
|
|
191 |
redirect_to wiki_page_action_path('show', @page, {:anchor => anchor})
|
|
190 | 192 |
end |
191 | 193 |
format.api do |
192 | 194 |
if was_new_page |
193 |
render :action => 'show', :status => :created, :location => project_wiki_page_path(@project, @page.title)
|
|
195 |
render :action => 'show', :status => :created, :location => wiki_page_action_path('show', @page)
|
|
194 | 196 |
else |
195 | 197 |
render_api_ok |
196 | 198 |
end |
... | ... | |
224 | 226 |
@page.safe_attributes = params[:wiki_page] |
225 | 227 |
if request.post? && @page.save |
226 | 228 |
flash[:notice] = l(:notice_successful_update) |
227 |
redirect_to project_wiki_page_path(@page.project, @page.title)
|
|
229 |
redirect_to wiki_page_action_path('show', @page)
|
|
228 | 230 |
end |
229 | 231 |
end |
230 | 232 | |
231 | 233 |
def protect |
232 | 234 |
@page.update_attribute :protected, params[:protected] |
233 |
redirect_to project_wiki_page_path(@project, @page.title)
|
|
235 |
redirect_to wiki_page_action_path('show', @page)
|
|
234 | 236 |
end |
235 | 237 | |
236 | 238 |
# show page history |
... | ... | |
300 | 302 | |
301 | 303 |
if content = @page.content.versions.find_by_version(params[:version]) |
302 | 304 |
content.destroy |
303 |
redirect_to_referer_or history_project_wiki_page_path(@project, @page.title)
|
|
305 |
redirect_to_referer_or wiki_page_action_path('history', @page)
|
|
304 | 306 |
else |
305 | 307 |
render_404 |
306 | 308 |
end |
... | ... | |
346 | 348 |
private |
347 | 349 | |
348 | 350 |
def find_wiki |
349 |
@project = Project.find(params[:project_id]) |
|
350 |
@wiki = @project.wiki |
|
351 |
if params[:project_id] |
|
352 |
@project = Project.find(params[:project_id]) |
|
353 |
@wiki = @project.wiki |
|
354 |
else |
|
355 |
@wiki = Wiki.find_by(:project_id => nil) |
|
356 |
Wiki.create(:project => nil, :start_page => 'Wiki') if @wiki.nil? |
|
357 |
end |
|
351 | 358 |
render_404 unless @wiki |
352 | 359 |
rescue ActiveRecord::RecordNotFound |
353 | 360 |
render_404 |
354 | 361 |
end |
355 | 362 | |
363 |
def global_wiki? |
|
364 |
@wiki.project.nil? |
|
365 |
end |
|
366 | ||
356 | 367 |
# Finds the requested page or a new page if it doesn't exist |
357 | 368 |
def find_existing_or_new_page |
358 | 369 |
@page = @wiki.find_or_new_page(params[:id]) |
app/helpers/application_helper.rb | ||
---|---|---|
209 | 209 |
lambda do |wiki_page| |
210 | 210 |
link_to( |
211 | 211 |
wiki_page.pretty_title, |
212 |
project_wiki_page_path(wiki_page.project, wiki_page.title)
|
|
212 |
url_for({:controller => 'wiki', :action => 'show', project_id: wiki_page.project, id: wiki_page.title})
|
|
213 | 213 |
) |
214 | 214 |
end |
215 | 215 |
} |
... | ... | |
296 | 296 |
end |
297 | 297 |
end |
298 | 298 | |
299 |
def wiki_page_path(page, options={}) |
|
300 |
url_for({:controller => 'wiki', :action => 'show', :project_id => page.project, |
|
301 |
:id => page.title}.merge(options)) |
|
302 |
end |
|
303 | ||
304 | 299 |
def thumbnail_tag(attachment) |
305 | 300 |
thumbnail_size = Setting.thumbnails_size.to_i |
306 | 301 |
link_to( |
... | ... | |
959 | 954 |
next link_to(title.present? ? title.html_safe : h(page), url, :class => 'wiki-page') |
960 | 955 |
end |
961 | 956 | |
962 |
if page =~ /^([^\:]+)\:(.*)$/
|
|
957 |
if page =~ /^(.*)\:(.*)$/
|
|
963 | 958 |
identifier, page = $1, $2 |
964 | 959 |
link_project = Project.find_by_identifier(identifier) || Project.find_by_name(identifier) |
965 | 960 |
title ||= identifier if page.blank? |
966 | 961 |
end |
967 | ||
968 |
if link_project && link_project.wiki && User.current.allowed_to?(:view_wiki_pages, link_project) |
|
962 |
wiki = Wiki.find_by(:project => link_project) |
|
963 |
if wiki && wiki.allowed_to_permission?(:view_wiki_pages) && |
|
964 |
(link_project || (wiki.global? && link_project.nil?)) |
|
969 | 965 |
# extract anchor |
970 | 966 |
anchor = nil |
971 | 967 |
if page =~ /^(.+?)\#(.+)$/ |
... | ... | |
973 | 969 |
end |
974 | 970 |
anchor = sanitize_anchor_name(anchor) if anchor.present? |
975 | 971 |
# check if page exists |
976 |
wiki_page = link_project.wiki.find_page(page)
|
|
972 |
wiki_page = wiki.find_page(page) |
|
977 | 973 |
url = |
978 | 974 |
if anchor.present? && wiki_page.present? && |
979 | 975 |
(obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && |
app/helpers/wiki_helper.rb | ||
---|---|---|
63 | 63 |
def wiki_page_edit_cancel_path(page) |
64 | 64 |
if page.new_record? |
65 | 65 |
if parent = page.parent |
66 |
project_wiki_page_path(parent.project, parent.title)
|
|
66 |
wiki_page_action_path('show', parent)
|
|
67 | 67 |
else |
68 |
project_wiki_index_path(page.project) |
|
68 |
if page.project |
|
69 |
project_wiki_index_path(page.project) |
|
70 |
else |
|
71 |
wiki_index_path |
|
72 |
end |
|
69 | 73 |
end |
70 | 74 |
else |
71 |
project_wiki_page_path(page.project, page.title)
|
|
75 |
wiki_page_action_path('show', page)
|
|
72 | 76 |
end |
73 | 77 |
end |
74 | 78 | |
79 |
def wiki_page_action_path(action_name, page=nil, options={}) |
|
80 |
url_for({:controller => 'wiki', :action => action_name, :project_id => (page.wiki.project if page), :id => (page.title if page)}.merge(options)) |
|
81 |
end |
|
82 | ||
75 | 83 |
def wiki_content_update_info(content) |
76 | 84 |
l(:label_updated_time_by, :author => link_to_user(content.author), :age => time_tag(content.updated_on)).html_safe |
77 | 85 |
end |
app/models/wiki.rb | ||
---|---|---|
34 | 34 |
safe_attributes 'start_page' |
35 | 35 | |
36 | 36 |
def visible?(user=User.current) |
37 |
!user.nil? && user.allowed_to?(:view_wiki_pages, project) |
|
37 |
!user.nil? && user.allowed_to?(:view_wiki_pages, project, global: self.global?)
|
|
38 | 38 |
end |
39 | 39 | |
40 | 40 |
# Returns the wiki page that acts as the sidebar content |
... | ... | |
85 | 85 |
# Wiki.find_page("foo:bar") |
86 | 86 |
def self.find_page(title, options = {}) |
87 | 87 |
project = options[:project] |
88 |
if title.to_s =~ %r{^([^\:]+)\:(.*)$}
|
|
88 |
if title.to_s =~ %r{^(.*):(.*)$}
|
|
89 | 89 |
project_identifier, title = $1, $2 |
90 | 90 |
project = Project.find_by_identifier(project_identifier) || Project.find_by_name(project_identifier) |
91 | 91 |
end |
92 |
if project && project.wiki |
|
93 |
page = project.wiki.find_page(title) |
|
92 |
wiki = project_identifier.present? ? (project && project.wiki) : Wiki.find_by(project: nil) |
|
93 |
if wiki |
|
94 |
page = wiki.find_page(title) |
|
94 | 95 |
if page && page.content |
95 | 96 |
page |
96 | 97 |
end |
... | ... | |
105 | 106 |
title = (title.slice(0..0).upcase + (title.slice(1..-1) || '')) if title |
106 | 107 |
title |
107 | 108 |
end |
109 | ||
110 |
def global? |
|
111 |
self.project.nil? |
|
112 |
end |
|
113 | ||
114 |
def allowed_to_permission?(permission, user=User.current) |
|
115 |
user.allowed_to?(permission, self.project, :global => self.global?) |
|
116 |
end |
|
117 | ||
118 |
def allowed_to_action?(action) |
|
119 |
User.current.allowed_to?({:controller => 'wiki', :action => action}, self.project, :global => self.global?) |
|
120 |
end |
|
108 | 121 |
end |
app/models/wiki_page.rb | ||
---|---|---|
85 | 85 |
end |
86 | 86 | |
87 | 87 |
def visible?(user=User.current) |
88 |
!user.nil? && user.allowed_to?(:view_wiki_pages, project) |
|
88 |
!user.nil? && |
|
89 |
user.allowed_to?(:view_wiki_pages, self.project, global: self.wiki.global?) |
|
90 |
end |
|
91 | ||
92 |
def attachments_visible?(user=User.current) |
|
93 |
(respond_to?(:visible?) ? visible?(user) : true) && |
|
94 |
user.allowed_to?(self.class.attachable_options[:view_permission], self.project, global: self.wiki.global?) |
|
89 | 95 |
end |
90 | 96 | |
91 | 97 |
def title=(value) |
... | ... | |
210 | 216 | |
211 | 217 |
# Returns true if usr is allowed to edit the page, otherwise false |
212 | 218 |
def editable_by?(usr) |
213 |
!protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project)
|
|
219 |
!protected? || self.wiki.allowed_to_permission?(:protect_wiki_pages)
|
|
214 | 220 |
end |
215 | 221 | |
216 | 222 |
def attachments_deletable?(usr=User.current) |
app/views/wiki/_new_modal.html.erb | ||
---|---|---|
1 | 1 |
<h3 class="title"><%=l(:label_wiki_page_new)%></h3> |
2 | 2 | |
3 | 3 |
<%= labelled_form_for :page, @page, |
4 |
:url => new_project_wiki_page_path(@project),
|
|
4 |
:url => wiki_page_action_path('new', @page),
|
|
5 | 5 |
:method => 'post', |
6 | 6 |
:remote => true do |f| %> |
7 | 7 |
app/views/wiki/annotate.html.erb | ||
---|---|---|
6 | 6 | |
7 | 7 |
<%= wiki_page_breadcrumb(@page) %> |
8 | 8 | |
9 |
<%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)],
|
|
10 |
[l(:label_history), history_project_wiki_page_path(@page.project, @page.title)],
|
|
9 |
<%= title [@page.pretty_title, wiki_page_action_path('show', @page, {:version => nil})],
|
|
10 |
[l(:label_history), wiki_page_action_path('history', @page)],
|
|
11 | 11 |
"#{l(:label_version)} #{@annotate.content.version}" %> |
12 | 12 | |
13 | 13 |
<p> |
app/views/wiki/date_index.html.erb | ||
---|---|---|
1 | 1 |
<div class="contextual"> |
2 | 2 |
<% if User.current.allowed_to?(:edit_wiki_pages, @project) %> |
3 |
<%= link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), :remote => true, :class => 'icon icon-add' %>
|
|
3 |
<%= link_to l(:label_wiki_page_new), wiki_page_action_path('new', @page), :remote => true, :class => 'icon icon-add' %>
|
|
4 | 4 |
<% end %> |
5 | 5 |
<%= watcher_link(@wiki, User.current) %> |
6 | 6 |
<% if User.current.allowed_to?(:manage_wiki, @project) %> |
app/views/wiki/diff.html.erb | ||
---|---|---|
5 | 5 | |
6 | 6 |
<%= wiki_page_breadcrumb(@page) %> |
7 | 7 | |
8 |
<%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)],
|
|
9 |
[l(:label_history), history_project_wiki_page_path(@page.project, @page.title)],
|
|
8 |
<%= title [@page.pretty_title, wiki_page_action_path('show', @page, {:version => nil})],
|
|
9 |
[l(:label_history), wiki_page_action_path('history', @page)],
|
|
10 | 10 |
"#{l(:label_revision)} #{@diff.content_to.version}" %> |
11 | 11 | |
12 | 12 |
<p> |
app/views/wiki/edit.html.erb | ||
---|---|---|
63 | 63 |
<%= submit_tag l(:button_save) %> |
64 | 64 |
<%= link_to l(:button_cancel), wiki_page_edit_cancel_path(@page) %> |
65 | 65 |
</p> |
66 |
<%= wikitoolbar_for 'content_text', preview_project_wiki_page_path(:project_id => @project, :id => @page.title) %>
|
|
66 |
<%= wikitoolbar_for 'content_text', wiki_page_action_path('preview', @page) %>
|
|
67 | 67 |
<% end %> |
68 | 68 | |
69 | 69 |
<% content_for :header_tags do %> |
app/views/wiki/history.html.erb | ||
---|---|---|
1 | 1 |
<%= wiki_page_breadcrumb(@page) %> |
2 | 2 | |
3 |
<%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)], l(:label_history) %>
|
|
3 |
<%= title [@page.pretty_title, wiki_page_action_path('show', @page, {:version => nil})], l(:label_history) %>
|
|
4 | 4 | |
5 | 5 |
<%= form_tag({:controller => 'wiki', :action => 'diff', |
6 | 6 |
:project_id => @page.project, :id => @page.title}, |
... | ... | |
31 | 31 |
<td class="comments"><%= ver.comments %></td> |
32 | 32 |
<td class="buttons"> |
33 | 33 |
<%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %> |
34 |
<%= delete_link wiki_page_path(@page, :version => ver.version) if User.current.allowed_to?(:delete_wiki_pages, @page.project) && @version_count > 1 %>
|
|
34 |
<%= delete_link wiki_page_action_path('show', @page, {:version => ver.version}) if @page.wiki.allowed_to_permission?(:delete_wiki_pages) && @version_count > 1 %>
|
|
35 | 35 |
</td> |
36 | 36 |
</tr> |
37 | 37 |
<% line_num += 1 %> |
app/views/wiki/index.html.erb | ||
---|---|---|
1 | 1 |
<div class="contextual"> |
2 | 2 |
<% if User.current.allowed_to?(:edit_wiki_pages, @project) %> |
3 |
<%= link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), :remote => true, :class => 'icon icon-add' %>
|
|
3 |
<%= link_to l(:label_wiki_page_new), wiki_page_action_path('new'), :remote => true, :class => 'icon icon-add' %>
|
|
4 | 4 |
<% end %> |
5 | 5 |
<%= watcher_link(@wiki, User.current) %> |
6 | 6 |
<% if User.current.allowed_to?(:manage_wiki, @project) %> |
app/views/wiki/new.html.erb | ||
---|---|---|
1 | 1 |
<%= title l(:label_wiki_page_new) %> |
2 | 2 | |
3 | 3 |
<%= labelled_form_for :page, @page, |
4 |
:url => new_project_wiki_page_path(@project) do |f| %>
|
|
4 |
:url => wiki_page_action_path('new', @page) do |f| %>
|
|
5 | 5 | |
6 | 6 |
<%= render_error_messages @page.errors.full_messages_for(:title) %> |
7 | 7 |
app/views/wiki/rename.html.erb | ||
---|---|---|
30 | 30 |
<%= javascript_tag do %> |
31 | 31 |
$('#wiki_page_wiki_id').change(function() { |
32 | 32 |
$.ajax({ |
33 |
url: '<%= rename_project_wiki_page_path(@wiki, :format => 'js') %>',
|
|
33 |
url: '<%= wiki_page_action_path('rename', @page, {:format => 'js'}) %>',
|
|
34 | 34 |
type: 'get', |
35 | 35 |
data: { 'wiki_page[wiki_id]': $('#wiki_page_wiki_id').val() } |
36 | 36 |
}); |
app/views/wiki/show.html.erb | ||
---|---|---|
2 | 2 | |
3 | 3 |
<% if @editable %> |
4 | 4 |
<% if @content.current_version? %> |
5 |
<%= link_to_if_authorized(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) %>
|
|
5 |
<%= link_to(l(:button_edit), {:action => 'edit', :id => @page.title}, :class => 'icon icon-edit', :accesskey => accesskey(:edit)) if @page.wiki.allowed_to_action?('edit') %>
|
|
6 | 6 |
<%= watcher_link(@page, User.current) %> |
7 | 7 |
<% end %> |
8 | 8 |
<% end %> |
9 | 9 | |
10 | 10 |
<%= actions_dropdown do %> |
11 |
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') %>
|
|
11 |
<%= link_to(l(:label_history), {:action => 'history', :id => @page.title}, :class => 'icon icon-history') if @page.wiki.allowed_to_action?('history') %>
|
|
12 | 12 | |
13 | 13 |
<% if @editable %> |
14 | 14 |
<% if @content.current_version? %> |
15 |
<%= link_to_if_authorized(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? %>
|
|
16 |
<%= link_to_if_authorized(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? %>
|
|
17 |
<%= link_to_if_authorized(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') %>
|
|
18 |
<%= link_to_if_authorized(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :data => {:confirm => l(:text_are_you_sure)}, :class => 'icon icon-del') %>
|
|
15 |
<%= link_to(l(:button_lock), {:action => 'protect', :id => @page.title, :protected => 1}, :method => :post, :class => 'icon icon-lock') if !@page.protected? && @page.wiki.allowed_to_action?('protect') %>
|
|
16 |
<%= link_to(l(:button_unlock), {:action => 'protect', :id => @page.title, :protected => 0}, :method => :post, :class => 'icon icon-unlock') if @page.protected? && @page.wiki.allowed_to_action?('protect') %>
|
|
17 |
<%= link_to(l(:button_rename), {:action => 'rename', :id => @page.title}, :class => 'icon icon-move') if @page.wiki.allowed_to_action?('rename') %>
|
|
18 |
<%= link_to(l(:button_delete), {:action => 'destroy', :id => @page.title}, :method => :delete, :data => {:confirm => l(:text_are_you_sure)}, :class => 'icon icon-del') if @page.wiki.allowed_to_action?('destroy') %>
|
|
19 | 19 |
<% else %> |
20 |
<%= link_to_if_authorized(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') %>
|
|
20 |
<%= link_to(l(:button_rollback), {:action => 'edit', :id => @page.title, :version => @content.version }, :class => 'icon icon-cancel') if @page.wiki.allowed_to_action?('edit') %>
|
|
21 | 21 |
<% end %> |
22 | 22 |
<% end %> |
23 | 23 | |
24 | 24 |
<% if User.current.allowed_to?(:edit_wiki_pages, @project) %> |
25 |
<%= link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project, :parent => @page.title), :remote => true, :class => 'icon icon-add' %>
|
|
25 |
<%= link_to l(:label_wiki_page_new), wiki_page_action_path('new', @page, {:parent => @page.title}), :remote => true, :class => 'icon icon-add' %>
|
|
26 | 26 |
<% end %> |
27 | 27 |
<% end %> |
28 | 28 |
</div> |
... | ... | |
30 | 30 |
<%= wiki_page_breadcrumb(@page) %> |
31 | 31 | |
32 | 32 |
<% unless @content.current_version? %> |
33 |
<%= title [@page.pretty_title, project_wiki_page_path(@page.project, @page.title, :version => nil)],
|
|
34 |
[l(:label_history), history_project_wiki_page_path(@page.project, @page.title)],
|
|
33 |
<%= title [@page.pretty_title, wiki_page_action_path('show', @page, {:version => nil})],
|
|
34 |
[l(:label_history), wiki_page_action_path('history', @page)],
|
|
35 | 35 |
"#{l(:label_revision)} #{@content.version}" %> |
36 | 36 | |
37 | 37 |
<p> |
config/locales/ja.yml | ||
---|---|---|
300 | 300 |
field_attr_firstname: 名の属性 |
301 | 301 |
field_attr_lastname: 姓の属性 |
302 | 302 |
field_attr_mail: メールアドレスの属性 |
303 |
field_onthefly: ユーザーが存在しなければ作成
|
|
303 |
field_onthefly: あわせてユーザーを作成
|
|
304 | 304 |
field_start_date: 開始日 |
305 | 305 |
field_done_ratio: 進捗率 |
306 | 306 |
field_auth_source: 認証方式 |
config/routes.rb | ||
---|---|---|
206 | 206 |
get 'wiki/:id/:version/annotate', :to => 'wiki#annotate' |
207 | 207 |
get 'wiki/:id/:version/diff', :to => 'wiki#diff' |
208 | 208 |
end |
209 |
match 'wiki/index', :controller => 'wiki', :action => 'index', :via => :get |
|
210 |
resources :wiki, :except => [:index, :create, :show], :as => 'wiki_page' do |
|
211 |
member do |
|
212 |
get 'wiki', :as => 'show_wiki_page' |
|
213 |
get 'rename' |
|
214 |
post 'rename' |
|
215 |
get 'history' |
|
216 |
get 'diff' |
|
217 |
match 'preview', :via => [:post, :put, :patch] |
|
218 |
post 'protect' |
|
219 |
post 'add_attachment' |
|
220 |
end |
|
221 |
collection do |
|
222 |
get 'export' |
|
223 |
get 'date_index' |
|
224 |
post 'new' |
|
225 |
end |
|
226 |
end |
|
227 |
match 'wiki', :controller => 'wiki', :action => 'show', :via => :get |
|
228 |
get 'wiki/:id/:version', :to => 'wiki#show', :constraints => {:version => /\d+/} |
|
229 |
delete 'wiki/:id/:version', :to => 'wiki#destroy_version' |
|
230 |
get 'wiki/:id/:version/annotate', :to => 'wiki#annotate' |
|
231 |
get 'wiki/:id/:version/diff', :to => 'wiki#diff' |
|
232 |
match 'wiki/:id/destroy', :to => 'wikis#destroy', :via => [:get, :post] |
|
209 | 233 | |
210 | 234 |
resources :issues do |
211 | 235 |
member do |
db/migrate/20200729083854_allow_wiki_project_id_to_be_nil.rb | ||
---|---|---|
1 |
class AllowWikiProjectIdToBeNil < ActiveRecord::Migration[5.2] |
|
2 |
def up |
|
3 |
change_column_null :wikis, :project_id, true |
|
4 |
end |
|
5 |
def down |
|
6 |
change_column_null :wikis, :project_id, false |
|
7 |
end |
|
8 |
end |
lib/redmine.rb | ||
---|---|---|
279 | 279 |
end, |
280 | 280 |
:caption => :label_news_plural |
281 | 281 |
) |
282 |
menu.push( |
|
283 |
:wiki, |
|
284 |
{:controller => 'wiki', :action => 'show'}, |
|
285 |
:if => |
|
286 |
Proc.new do |
|
287 |
User.current.allowed_to?(:view_wiki_pages, nil, :global => true) |
|
288 |
end, |
|
289 |
:caption => :label_wiki |
|
290 |
) |
|
282 | 291 |
end |
283 | 292 | |
284 | 293 |
Redmine::MenuManager.map :admin_menu do |menu| |
lib/redmine/wiki_formatting/macros.rb | ||
---|---|---|
207 | 207 |
else |
208 | 208 |
raise t(:error_childpages_macro_no_argument) |
209 | 209 |
end |
210 |
raise t(:error_page_not_found) if page.nil? || !User.current.allowed_to?(:view_wiki_pages, page.wiki.project) |
|
211 | ||
210 |
raise t(:error_page_not_found) if page.nil? || !User.current.allowed_to?(:view_wiki_pages, page.wiki.project, global: page.wiki.global?) |
|
212 | 211 |
pages = page.self_and_descendants(options[:depth]).group_by(&:parent_id) |
213 | 212 |
render_page_hierarchy(pages, options[:parent] ? page.parent_id : page.id) |
214 | 213 |
end |
... | ... | |
218 | 217 |
"{{include(projectname:Foo)}} -- to include a page of a specific project wiki" |
219 | 218 |
macro :include do |obj, args| |
220 | 219 |
page = Wiki.find_page(args.first.to_s, :project => @project) |
221 |
raise t(:error_page_not_found) if page.nil? || !User.current.allowed_to?(:view_wiki_pages, page.wiki.project) |
|
222 | ||
220 |
raise t(:error_page_not_found) if page.nil? || !User.current.allowed_to?(:view_wiki_pages, page.wiki.project, global: page.wiki.global?) |
|
223 | 221 |
@included_wiki_pages ||= [] |
224 | 222 |
raise t(:error_circular_inclusion) if @included_wiki_pages.include?(page.id) |
225 | 223 |
- « Previous
- 1
- 2
- Next »