Class: Wiki

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Redmine::SafeAttributes
Defined in:
app/models/wiki.rb

Overview

Redmine - project management software Copyright (C) 2006-2020 Jean-Philippe Lang

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Redmine::SafeAttributes

#delete_unsafe_attributes, included, #safe_attribute?, #safe_attribute_names, #safe_attributes=

Class Method Details

.find_page(title, options = {}) ⇒ Object

Finds a page by title The given string can be of one of the forms: “title” or “project:title” Examples:

Wiki.find_page("bar", project => foo)
Wiki.find_page("foo:bar")

86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/wiki.rb', line 86

def self.find_page(title, options = {})
  project = options[:project]
  if title.to_s =~ %r{^([^\:]+)\:(.*)$}
    project_identifier, title = $1, $2
    project = Project.find_by_identifier(project_identifier) || Project.find_by_name(project_identifier)
  end
  if project && project.wiki
    page = project.wiki.find_page(title)
    if page && page.content
      page
    end
  end
end

.titleize(title) ⇒ Object

turn a string into a valid page title


101
102
103
104
105
106
107
# File 'app/models/wiki.rb', line 101

def self.titleize(title)
  # replace spaces with _ and remove unwanted caracters
  title = title.gsub(/\s+/, '_').delete(',./?;|:') if title
  # upcase the first letter
  title = (title.slice(0..0).upcase + (title.slice(1..-1) || '')) if title
  title
end

Instance Method Details

#delete_redirectsObject

Deletes all redirects from/to the wiki


76
77
78
79
# File 'app/models/wiki.rb', line 76

def delete_redirects
  WikiRedirect.where(:wiki_id => id).delete_all
  WikiRedirect.where(:redirects_to_wiki_id => id).delete_all
end

#find_or_new_page(title) ⇒ Object

find the page with the given title if page doesn't exist, return a new page


48
49
50
51
# File 'app/models/wiki.rb', line 48

def find_or_new_page(title)
  title = start_page if title.blank?
  find_page(title) || WikiPage.new(:wiki => self, :title => Wiki.titleize(title))
end

#find_page(title, options = {}) ⇒ Object

find the page with the given title


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/models/wiki.rb', line 54

def find_page(title, options = {})
  @page_found_with_redirect = false
  title = start_page if title.blank?
  title = Wiki.titleize(title)
  page = pages.find_by("LOWER(title) = LOWER(?)", title)
  if page.nil? && options[:with_redirect] != false
    # search for a redirect
    redirect = redirects.where("LOWER(title) = LOWER(?)", title).first
    if redirect
      page = redirect.target_page
      @page_found_with_redirect = true
    end
  end
  page
end

#page_found_with_redirect?Boolean

Returns true if the last page was found with a redirect

Returns:

  • (Boolean)

71
72
73
# File 'app/models/wiki.rb', line 71

def page_found_with_redirect?
  @page_found_with_redirect
end

Returns the wiki page that acts as the sidebar content or nil if no such page exists


42
43
44
# File 'app/models/wiki.rb', line 42

def sidebar
  @sidebar ||= find_page('Sidebar', :with_redirect => false)
end

#visible?(user = User.current) ⇒ Boolean

Returns:

  • (Boolean)

36
37
38
# File 'app/models/wiki.rb', line 36

def visible?(user=User.current)
  !user.nil? && user.allowed_to?(:view_wiki_pages, project)
end