Class: Wiki

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

Overview

Redmine - project management software Copyright © 2006-2009 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

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")


63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'app/models/wiki.rb', line 63

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



78
79
80
81
82
83
84
# File 'app/models/wiki.rb', line 78

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

#find_or_new_page(title) ⇒ Object

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



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

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



46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/wiki.rb', line 46

def find_page(title, options = {})
  title = start_page if title.blank?
  title = Wiki.titleize(title)
  page = pages.first(:conditions => ["LOWER(title) = LOWER(?)", title])
  if !page && !(options[:with_redirect] == false)
    # search for a redirect
    redirect = redirects.first(:conditions => ["LOWER(title) = LOWER(?)", title])
    page = find_page(redirect.redirects_to, :with_redirect => false) if redirect
  end
  page
end

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



34
35
36
# File 'app/models/wiki.rb', line 34

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

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

Returns:

  • (Boolean)


28
29
30
# File 'app/models/wiki.rb', line 28

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