Class: Wiki

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

Overview

– copyright ChiliProject is a project management system.

Copyright (C) 2010-2013 the ChiliProject Team

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.

See doc/COPYRIGHT.rdoc for more details. ++

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from Redmine::SafeAttributes

#delete_unsafe_attributes, included, #safe_attribute_names, #safe_attributes=

Class Method Details

+ (Object) find_page(title, options = {})

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

+ (Object) titleize(title)

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

- (Object) find_or_new_page(title)

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

- (Object) find_page(title, options = {})

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

- (Boolean) visible?(user = User.current)



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