Fix #2851: Account deletion should remove name change requests.

Hides name change requests for deleted users (username matches /user_[0-9]+~*/).
This commit is contained in:
evazion
2017-01-19 22:24:53 +00:00
parent 75c13cc953
commit 7486bb0add
4 changed files with 28 additions and 9 deletions

View File

@@ -8,18 +8,18 @@ class UserFeedbacksController < ApplicationController
end end
def edit def edit
@user_feedback = UserFeedback.find(params[:id]) @user_feedback = UserFeedback.visible.find(params[:id])
check_privilege(@user_feedback) check_privilege(@user_feedback)
respond_with(@user_feedback) respond_with(@user_feedback)
end end
def show def show
@user_feedback = UserFeedback.find(params[:id]) @user_feedback = UserFeedback.visible.find(params[:id])
respond_with(@user_feedback) respond_with(@user_feedback)
end end
def index def index
@search = UserFeedback.search(params[:search]) @search = UserFeedback.visible.search(params[:search])
@user_feedbacks = @search.paginate(params[:page], :limit => params[:limit]).order("created_at desc") @user_feedbacks = @search.paginate(params[:page], :limit => params[:limit]).order("created_at desc")
respond_with(@user_feedbacks) do |format| respond_with(@user_feedbacks) do |format|
format.xml do format.xml do
@@ -34,14 +34,14 @@ class UserFeedbacksController < ApplicationController
end end
def update def update
@user_feedback = UserFeedback.find(params[:id]) @user_feedback = UserFeedback.visible.find(params[:id])
check_privilege(@user_feedback) check_privilege(@user_feedback)
@user_feedback.update_attributes(params[:user_feedback]) @user_feedback.update_attributes(params[:user_feedback])
respond_with(@user_feedback) respond_with(@user_feedback)
end end
def destroy def destroy
@user_feedback = UserFeedback.find(params[:id]) @user_feedback = UserFeedback.visible.find(params[:id])
check_privilege(@user_feedback) check_privilege(@user_feedback)
@user_feedback.destroy @user_feedback.destroy
respond_with(@user_feedback) respond_with(@user_feedback)

View File

@@ -729,6 +729,16 @@ class User < ActiveRecord::Base
where("level = ?", Levels::ADMIN) where("level = ?", Levels::ADMIN)
end end
# UserDeletion#rename renames deleted users to `user_<1234>~`. Tildes
# are appended if the username is taken.
def deleted
where("name ~ 'user_[0-9]+~*'")
end
def undeleted
where("name !~ 'user_[0-9]+~*'")
end
def with_email(email) def with_email(email)
if email.blank? if email.blank?
where("FALSE") where("FALSE")

View File

@@ -34,6 +34,15 @@ class UserFeedback < ActiveRecord::Base
where("user_id = ?", user_id) where("user_id = ?", user_id)
end end
def visible(viewer = CurrentUser.user)
if viewer.is_admin?
all
else
# joins(:user).merge(User.undeleted).or(where("body !~ 'Name changed from [^\s:]+ to [^\s:]+'"))
joins(:user).where.not("users.name ~ 'user_[0-9]+~*' AND user_feedback.body ~ 'Name changed from [^\s:]+ to [^\s:]+'")
end
end
def search(params) def search(params)
q = where("true") q = where("true")
return q if params.blank? return q if params.blank?

View File

@@ -19,11 +19,11 @@ class UserNameChangeRequest < ActiveRecord::Base
where(:status => "approved") where(:status => "approved")
end end
def self.visible def self.visible(viewer = CurrentUser.user)
if CurrentUser.is_admin? if viewer.is_admin?
all all
elsif CurrentUser.is_member? elsif viewer.is_member?
where("user_name_change_requests.status = 'approved' OR user_name_change_requests.user_id = ?", CurrentUser.id) joins(:user).merge(User.undeleted).where("user_name_change_requests.status = 'approved' OR user_name_change_requests.user_id = ?", viewer.id)
else else
none none
end end