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 »