fixes #2716: Wiki pages should be undeletable

This commit is contained in:
Albert Yi
2016-10-18 15:17:50 -07:00
parent 2a5343b8cf
commit e78b7d2a8c
12 changed files with 55 additions and 24 deletions

View File

@@ -6,14 +6,13 @@ class WikiPage < ActiveRecord::Base
before_validation :initialize_creator, :on => :create
before_validation :initialize_updater
after_save :create_version
before_destroy :create_mod_action_for_destroy
belongs_to :creator, :class_name => "User"
belongs_to :updater, :class_name => "User"
validates_uniqueness_of :title, :case_sensitive => false
validates_presence_of :title
validate :validate_locker_is_moderator
validate :validate_locker_is_builder
validate :validate_not_locked
attr_accessible :title, :body, :is_locked, :other_names
attr_accessible :title, :body, :is_locked, :is_deleted, :other_names
has_one :tag, :foreign_key => "name", :primary_key => "title"
has_one :artist, lambda {where(:is_active => true)}, :foreign_key => "name", :primary_key => "title"
has_many :versions, lambda {order("wiki_page_versions.id ASC")}, :class_name => "WikiPageVersion", :dependent => :destroy
@@ -23,6 +22,10 @@ class WikiPage < ActiveRecord::Base
where("title = ?", title.mb_chars.downcase.tr(" ", "_"))
end
def active
where("is_deleted = false")
end
def recent
order("updated_at DESC").limit(25)
end
@@ -65,6 +68,10 @@ class WikiPage < ActiveRecord::Base
q = q.where("creator_id = (select _.id from users _ where lower(_.name) = ?)", params[:creator_name].tr(" ", "_").mb_chars.downcase)
end
if params[:hide_deleted] =~ /y/i
q = q.where("is_deleted = false")
end
if params[:other_names_present] == "yes"
q = q.where("other_names is not null and other_names != ''")
elsif params[:other_names_present] == "no"
@@ -114,15 +121,15 @@ class WikiPage < ActiveRecord::Base
titled(title).select("title, id").first
end
def validate_locker_is_moderator
if is_locked_changed? && !CurrentUser.is_moderator?
errors.add(:is_locked, "can be modified by moderators only")
def validate_locker_is_builder
if is_locked_changed? && !CurrentUser.is_builder?
errors.add(:is_locked, "can be modified by builders only")
return false
end
end
def validate_not_locked
if is_locked? && !CurrentUser.is_moderator?
if is_locked? && !CurrentUser.is_builder?
errors.add(:is_locked, "and cannot be updated")
return false
end
@@ -187,12 +194,13 @@ class WikiPage < ActiveRecord::Base
:title => title,
:body => body,
:is_locked => is_locked,
:is_deleted => is_deleted,
:other_names => other_names
)
end
def create_version
if title_changed? || body_changed? || is_locked_changed? || other_names_changed?
if title_changed? || body_changed? || is_locked_changed? || is_deleted_changed? || other_names_changed?
if merge_version?
merge_version
else
@@ -231,12 +239,8 @@ class WikiPage < ActiveRecord::Base
end.map {|x| x.mb_chars.downcase.tr(" ", "_").to_s}
end
def create_mod_action_for_destroy
ModAction.create(:description => "permanently deleted wiki page [[#{title}]]")
end
def visible?
artist.blank? || !artist.is_banned? || CurrentUser.is_moderator?
artist.blank? || !artist.is_banned? || CurrentUser.is_builder?
end
def other_names_array

View File

@@ -41,7 +41,7 @@ class WikiPageVersion < ActiveRecord::Base
end
def visible?
artist.blank? || !artist.is_banned? || CurrentUser.is_moderator?
artist.blank? || !artist.is_banned? || CurrentUser.is_builder?
end
def other_names_array