Class: WikiPage
  
  
  
  
    
      Constant Summary
      collapse
    
    
      
        - DEFAULT_PROTECTED_PAGES =
          
  
    
Wiki pages that are protected by default 
 
 
  
 
- %w(sidebar) 
Instance Attribute Summary collapse
  
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  
  #delete_unsafe_attributes, included, #safe_attribute?, #safe_attribute_names
  
  Constructor Details
  
    
  
  
    #initialize(attributes = nil, *args)  ⇒ WikiPage 
  
  
  
  
    | 
80
81
82
83
84
85 | # File 'app/models/wiki_page.rb', line 80
def initialize(attributes=nil, *args)
  super
  if new_record? && DEFAULT_PROTECTED_PAGES.include?(title.to_s.downcase)
    self.protected = true
  end
end | 
 
  
 
  
    Instance Attribute Details
    
      
      
      
  
  
    #deleted_attachment_ids  ⇒ Object 
  
  
  
  
    | 
262
263
264 | # File 'app/models/wiki_page.rb', line 262
def deleted_attachment_ids
  Array(@deleted_attachment_ids).map(&:to_i)
end | 
 
    
      
      
      
  
  
    #redirect_existing_links  ⇒ Object 
  
  
  
  
    
Returns the value of attribute redirect_existing_links.
   
 
  
  
    | 
51
52
53 | # File 'app/models/wiki_page.rb', line 51
def redirect_existing_links
  @redirect_existing_links
end | 
 
    
   
  
    Class Method Details
    
      
  
  
    .pretty_title(str)  ⇒ Object 
  
  
  
  
    | 
187
188
189 | # File 'app/models/wiki_page.rb', line 187
def self.pretty_title(str)
  (str && str.is_a?(String)) ? str.tr('_', ' ') : str
end | 
 
    
   
  
    Instance Method Details
    
      
  
  
    #annotate(version = nil)  ⇒ Object 
  
  
  
  
    | 
181
182
183
184
185 | # File 'app/models/wiki_page.rb', line 181
def annotate(version=nil)
  version = version ? version.to_i : self.content.version
  c = content.versions.find_by_version(version)
  c ? WikiAnnotate.new(c) : nil
end | 
 
    
      
  
  
    #attachments_deletable?(usr = User.current)  ⇒ Boolean 
  
  
  
  
    | 
212
213
214 | # File 'app/models/wiki_page.rb', line 212
def attachments_deletable?(usr=User.current)
  editable_by?(usr) && super(usr)
end | 
 
    
      
  
  
    #content_for_version(version = nil)  ⇒ Object 
  
  
  
  
    | 
164
165
166 | # File 'app/models/wiki_page.rb', line 164
def content_for_version(version=nil)
  (content && version) ? content.versions.find_by_version(version.to_i) : content
end | 
 
    
      
  
  
    #delete_redirects  ⇒ Object 
  
  
  
  
    
Deletes redirects to this page
   
 
  
  
    | 
156
157
158 | # File 'app/models/wiki_page.rb', line 156
def delete_redirects
  WikiRedirect.where(:redirects_to_wiki_id => wiki_id, :redirects_to => title).delete_all
end | 
 
    
      
  
  
    #delete_selected_attachments  ⇒ Object 
  
  
  
  
    | 
266
267
268
269
270
271 | # File 'app/models/wiki_page.rb', line 266
def delete_selected_attachments
  if deleted_attachment_ids.present?
    objects = attachments.where(:id => deleted_attachment_ids.map(&:to_i))
    attachments.delete(objects)
  end
end | 
 
    
      
  
  
    #diff(version_to = nil, version_from = nil)  ⇒ Object 
  
  
  
  
    | 
168
169
170
171
172
173
174
175
176
177
178
179 | # File 'app/models/wiki_page.rb', line 168
def diff(version_to=nil, version_from=nil)
  version_to = version_to ? version_to.to_i : self.content.version
  content_to = content.versions.find_by_version(version_to)
  content_from = version_from ? content.versions.find_by_version(version_from.to_i) : content_to.try(:previous)
  return nil unless content_to && content_from
  if content_from.version > content_to.version
    content_to, content_from = content_from, content_to
  end
  (content_to && content_from) ? WikiDiff.new(content_to, content_from) : nil
end | 
 
    
      
  
  
    #editable_by?(usr)  ⇒ Boolean 
  
  
  
  
    
Returns true if usr is allowed to edit the page, otherwise false
   
 
  
  
    | 
208
209
210 | # File 'app/models/wiki_page.rb', line 208
def editable_by?(usr)
  !protected? || usr.allowed_to?(:protect_wiki_pages, wiki.project)
end | 
 
    
      
  
  
    #is_start_page  ⇒ Object 
  
  
  
  
    | 
226
227
228
229
230
231 | # File 'app/models/wiki_page.rb', line 226
def is_start_page
  if @is_start_page.nil?
    @is_start_page = wiki.try(:start_page) == title_was
  end
  @is_start_page
end | 
 
    
      
  
  
    #is_start_page=(arg)  ⇒ Object 
  
  
  
  
    | 
233
234
235 | # File 'app/models/wiki_page.rb', line 233
def is_start_page=(arg)
  @is_start_page = arg == '1' || arg == true
end | 
 
    
      
  
  
    #parent_title  ⇒ Object 
  
  
  
  
    | 
216
217
218 | # File 'app/models/wiki_page.rb', line 216
def parent_title
  @parent_title || (self.parent && self.parent.pretty_title)
end | 
 
    
      
  
  
    #parent_title=(t)  ⇒ Object 
  
  
  
  
    | 
220
221
222
223
224 | # File 'app/models/wiki_page.rb', line 220
def parent_title=(t)
  @parent_title = t
  parent_page = t.blank? ? nil : self.wiki.find_page(t)
  self.parent = parent_page
end | 
 
    
      
  
  
    #pretty_title  ⇒ Object 
  
  
  
  
    | 
160
161
162 | # File 'app/models/wiki_page.rb', line 160
def pretty_title
  WikiPage.pretty_title(title)
end | 
 
    
      
  
  
    #project  ⇒ Object 
  
  
  
  
    | 
191
192
193 | # File 'app/models/wiki_page.rb', line 191
def project
  wiki.try(:project)
end | 
 
    
      
  
  
    #safe_attributes=(attrs, user = User.current)  ⇒ Object 
  
  
  
  
    | 
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112 | # File 'app/models/wiki_page.rb', line 96
def safe_attributes=(attrs, user=User.current)
  if attrs.respond_to?(:to_unsafe_hash)
    attrs = attrs.to_unsafe_hash
  end
  return unless attrs.is_a?(Hash)
  attrs = attrs.deep_dup
    if (w_id = attrs.delete('wiki_id')) && safe_attribute?('wiki_id')
    if (w = Wiki.find_by_id(w_id)) && w.project && user.allowed_to?(:rename_wiki_pages, w.project)
      self.wiki = w
    end
  end
  super attrs, user
end | 
 
    
      
  
  
    #save_with_content(content)  ⇒ Object 
  
  
  
  
    
Saves the page and its content if text was changed Return true if the page was saved
   
 
  
  
    | 
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260 | # File 'app/models/wiki_page.rb', line 246
def save_with_content(content)
  ret = nil
  transaction do
    ret = save
    if content.text_changed?
      begin
        self.content = content
      rescue ActiveRecord::RecordNotSaved
        ret = false
      end
    end
    raise ActiveRecord::Rollback unless ret
  end
  ret
end | 
 
    
      
  
  
    #text  ⇒ Object 
  
  
  
  
    | 
195
196
197 | # File 'app/models/wiki_page.rb', line 195
def text
  content.text if content
end | 
 
    
      
  
  
    #title=(value)  ⇒ Object 
  
  
  
  
    | 
91
92
93
94 | # File 'app/models/wiki_page.rb', line 91
def title=(value)
  value = Wiki.titleize(value)
  write_attribute(:title, value)
end | 
 
    
      
  
  
    #updated_on  ⇒ Object 
  
  
  
  
    | 
199
200
201 | # File 'app/models/wiki_page.rb', line 199
def updated_on
  content_attribute(:updated_on)
end | 
 
    
      
  
  
    #version  ⇒ Object 
  
  
  
  
    | 
203
204
205 | # File 'app/models/wiki_page.rb', line 203
def version
  content_attribute(:version)
end | 
 
    
      
  
  
    #visible?(user = User.current)  ⇒ Boolean 
  
  
  
  
    | 
87
88
89 | # File 'app/models/wiki_page.rb', line 87
def visible?(user=User.current)
  !user.nil? && user.allowed_to?(:view_wiki_pages, project)
end |