Class: Wiki

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

Overview

redMine - project management software Copyright (C) 2006-2007 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")


51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/models/wiki.rb', line 51

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



66
67
68
69
70
71
72
# File 'app/models/wiki.rb', line 66

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



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

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



34
35
36
37
38
39
40
41
42
43
44
# File 'app/models/wiki.rb', line 34

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