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
Returns a new instance of 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
|