Redmine >= 3.0 required
This commit is contained in:
parent
1d2b123ba1
commit
3956def6bd
@ -36,30 +36,14 @@ class DmsfFile < ActiveRecord::Base
|
||||
belongs_to :folder, :class_name => 'DmsfFolder', :foreign_key => 'dmsf_folder_id'
|
||||
belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id'
|
||||
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
has_many :revisions, -> { order("#{DmsfFileRevision.table_name}.major_version DESC, #{DmsfFileRevision.table_name}.minor_version DESC, #{DmsfFileRevision.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfFileRevision', :foreign_key => 'dmsf_file_id',
|
||||
:dependent => :destroy
|
||||
has_many :locks, -> { where(entity_type: 0).order("#{DmsfLock.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||
has_many :referenced_links, -> { where target_type: DmsfFile.model_name.to_s},
|
||||
:class_name => 'DmsfLink', :foreign_key => 'target_id', :dependent => :destroy
|
||||
accepts_nested_attributes_for :revisions, :locks, :referenced_links, :project
|
||||
else
|
||||
has_many :revisions, :class_name => 'DmsfFileRevision', :foreign_key => 'dmsf_file_id',
|
||||
:order => "#{DmsfFileRevision.table_name}.major_version DESC, #{DmsfFileRevision.table_name}.minor_version DESC, #{DmsfFileRevision.table_name}.updated_at DESC",
|
||||
:dependent => :destroy
|
||||
has_many :locks, :class_name => 'DmsfLock', :foreign_key => 'entity_id',
|
||||
:order => "#{DmsfLock.table_name}.updated_at DESC",
|
||||
:conditions => {:entity_type => 0},
|
||||
:dependent => :destroy
|
||||
has_many :referenced_links, :class_name => 'DmsfLink', :foreign_key => 'target_id',
|
||||
:conditions => {:target_type => DmsfFile.model_name.to_s}, :dependent => :destroy
|
||||
end
|
||||
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
accepts_nested_attributes_for :revisions, :locks, :referenced_links
|
||||
end
|
||||
has_many :revisions, -> { order("#{DmsfFileRevision.table_name}.major_version DESC, #{DmsfFileRevision.table_name}.minor_version DESC, #{DmsfFileRevision.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfFileRevision', :foreign_key => 'dmsf_file_id',
|
||||
:dependent => :destroy
|
||||
has_many :locks, -> { where(entity_type: 0).order("#{DmsfLock.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||
has_many :referenced_links, -> { where target_type: DmsfFile.model_name.to_s},
|
||||
:class_name => 'DmsfLink', :foreign_key => 'target_id', :dependent => :destroy
|
||||
accepts_nested_attributes_for :revisions, :locks, :referenced_links, :project
|
||||
|
||||
scope :visible, lambda { |*args|
|
||||
where(deleted: false)
|
||||
@ -80,28 +64,15 @@ class DmsfFile < ActiveRecord::Base
|
||||
existing_file.nil? || existing_file.id == self.id
|
||||
end
|
||||
|
||||
if (Rails::VERSION::MAJOR <= 3)
|
||||
attr_accessor :event_description
|
||||
end
|
||||
|
||||
acts_as_event :title => Proc.new { |o| o.name },
|
||||
:description => Proc.new { |o|
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
desc = Redmine::Search.cache_store.fetch("DmsfFile-#{o.id}")
|
||||
if desc
|
||||
Redmine::Search.cache_store.delete("DmsfFile-#{o.id}")
|
||||
else
|
||||
desc = o.description
|
||||
desc += ' / ' if o.description.present? && o.last_revision.comment.present?
|
||||
desc += o.last_revision.comment if o.last_revision.comment.present?
|
||||
end
|
||||
desc = Redmine::Search.cache_store.fetch("DmsfFile-#{o.id}")
|
||||
if desc
|
||||
Redmine::Search.cache_store.delete("DmsfFile-#{o.id}")
|
||||
else
|
||||
desc = o.event_description
|
||||
unless desc.present?
|
||||
desc = o.description
|
||||
desc += ' / ' if o.description.present? && o.last_revision.comment.present?
|
||||
desc += o.last_revision.comment if o.last_revision.comment.present?
|
||||
end
|
||||
desc = o.description
|
||||
desc += ' / ' if o.description.present? && o.last_revision.comment.present?
|
||||
desc += o.last_revision.comment if o.last_revision.comment.present?
|
||||
end
|
||||
desc
|
||||
},
|
||||
@ -405,12 +376,8 @@ class DmsfFile < ActiveRecord::Base
|
||||
if dmsf_file
|
||||
if user.allowed_to?(:view_dmsf_files, dmsf_file.project) &&
|
||||
(project_ids.blank? || (project_ids.include?(dmsf_file.project.id)))
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
Redmine::Search.cache_store.write("DmsfFile-#{dmsf_file.id}",
|
||||
dochash['sample'].force_encoding('UTF-8')) if dochash['sample']
|
||||
else
|
||||
dmsf_file.event_description = dochash['sample'].force_encoding('UTF-8') if dochash['sample']
|
||||
end
|
||||
break if(!options[:limit].blank? && results.count >= options[:limit])
|
||||
results << dmsf_file
|
||||
end
|
||||
|
||||
@ -28,20 +28,13 @@ class DmsfFileRevision < ActiveRecord::Base
|
||||
belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id'
|
||||
has_many :access, :class_name => 'DmsfFileRevisionAccess', :foreign_key => 'dmsf_file_revision_id', :dependent => :destroy
|
||||
has_many :dmsf_workflow_step_assignment, :dependent => :destroy
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
accepts_nested_attributes_for :access, :dmsf_workflow_step_assignment, :file, :user
|
||||
end
|
||||
accepts_nested_attributes_for :access, :dmsf_workflow_step_assignment, :file, :user
|
||||
|
||||
attr_accessible :file, :title, :name, :description, :comment
|
||||
|
||||
# Returns a list of revisions that are not deleted here, or deleted at parent level either
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
scope :visible, -> { where(deleted: false) }
|
||||
scope :deleted, -> { where(deleted: true) }
|
||||
else
|
||||
scope :visible, where(:deleted => false)
|
||||
scope :deleted, where(:deleted => true)
|
||||
end
|
||||
scope :visible, -> { where(deleted: false) }
|
||||
scope :deleted, -> { where(deleted: true) }
|
||||
|
||||
acts_as_customizable
|
||||
acts_as_event :title => Proc.new {|o| "#{l(:label_dmsf_updated)}: #{o.file.dmsf_path_str}"},
|
||||
@ -49,28 +42,16 @@ class DmsfFileRevision < ActiveRecord::Base
|
||||
:datetime => Proc.new {|o| o.updated_at },
|
||||
:description => Proc.new {|o| o.comment },
|
||||
:author => Proc.new {|o| o.user }
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
acts_as_activity_provider :type => 'dmsf_file_revisions',
|
||||
:timestamp => "#{DmsfFileRevision.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevision.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revisions,
|
||||
:scope => select("#{DmsfFileRevision.table_name}.*").
|
||||
joins(
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id").
|
||||
where("#{DmsfFile.table_name}.deleted = :false", {:false => false})
|
||||
else
|
||||
acts_as_activity_provider :type => 'dmsf_file_revisions',
|
||||
:timestamp => "#{DmsfFileRevision.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevision.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revisions,
|
||||
:find_options => {:select => "#{DmsfFileRevision.table_name}.*",
|
||||
:joins =>
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id",
|
||||
:conditions => ["#{DmsfFile.table_name}.deleted = :false", {:false => false}]
|
||||
}
|
||||
end
|
||||
|
||||
acts_as_activity_provider :type => 'dmsf_file_revisions',
|
||||
:timestamp => "#{DmsfFileRevision.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevision.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revisions,
|
||||
:scope => select("#{DmsfFileRevision.table_name}.*").
|
||||
joins(
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id").
|
||||
where("#{DmsfFile.table_name}.deleted = :false", {:false => false})
|
||||
|
||||
validates :title, :name, :presence => true
|
||||
validates_format_of :name, :with => DmsfFolder.invalid_characters,
|
||||
|
||||
@ -22,9 +22,7 @@ class DmsfFileRevisionAccess < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
delegate :project, :to => :revision, :allow_nil => false
|
||||
delegate :file, :to => :revision, :allow_nil => false
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
accepts_nested_attributes_for :user, :revision
|
||||
end
|
||||
accepts_nested_attributes_for :user, :revision
|
||||
|
||||
DownloadAction = 0
|
||||
EmailAction = 1
|
||||
@ -34,29 +32,16 @@ class DmsfFileRevisionAccess < ActiveRecord::Base
|
||||
:datetime => Proc.new {|o| o.updated_at },
|
||||
:description => Proc.new {|o| o.revision.comment },
|
||||
:author => Proc.new {|o| o.user }
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
acts_as_activity_provider :type => 'dmsf_file_revision_accesses',
|
||||
:timestamp => "#{DmsfFileRevisionAccess.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevisionAccess.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revision_accesses,
|
||||
:scope => select("#{DmsfFileRevisionAccess.table_name}.*").
|
||||
joins(
|
||||
"INNER JOIN #{DmsfFileRevision.table_name} ON #{DmsfFileRevisionAccess.table_name}.dmsf_file_revision_id = #{DmsfFileRevision.table_name}.id " +
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id").
|
||||
where("#{DmsfFile.table_name}.deleted = :false", {:false => false})
|
||||
else
|
||||
acts_as_activity_provider :type => 'dmsf_file_revision_accesses',
|
||||
:timestamp => "#{DmsfFileRevisionAccess.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevisionAccess.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revision_accesses,
|
||||
:find_options => {:select => "#{DmsfFileRevisionAccess.table_name}.*",
|
||||
:joins =>
|
||||
"INNER JOIN #{DmsfFileRevision.table_name} ON #{DmsfFileRevisionAccess.table_name}.dmsf_file_revision_id = #{DmsfFileRevision.table_name}.id " +
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id",
|
||||
:conditions => ["#{DmsfFile.table_name}.deleted = :false", {:false => false}]
|
||||
}
|
||||
end
|
||||
|
||||
acts_as_activity_provider :type => 'dmsf_file_revision_accesses',
|
||||
:timestamp => "#{DmsfFileRevisionAccess.table_name}.updated_at",
|
||||
:author_key => "#{DmsfFileRevisionAccess.table_name}.user_id",
|
||||
:permission => :view_dmsf_file_revision_accesses,
|
||||
:scope => select("#{DmsfFileRevisionAccess.table_name}.*").
|
||||
joins(
|
||||
"INNER JOIN #{DmsfFileRevision.table_name} ON #{DmsfFileRevisionAccess.table_name}.dmsf_file_revision_id = #{DmsfFileRevision.table_name}.id " +
|
||||
"INNER JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " +
|
||||
"INNER JOIN #{Project.table_name} ON #{DmsfFile.table_name}.project_id = #{Project.table_name}.id").
|
||||
where("#{DmsfFile.table_name}.deleted = :false", {:false => false})
|
||||
|
||||
end
|
||||
|
||||
@ -36,32 +36,17 @@ class DmsfFolder < ActiveRecord::Base
|
||||
:dependent => :destroy
|
||||
has_many :files, :class_name => 'DmsfFile', :foreign_key => 'dmsf_folder_id',
|
||||
:dependent => :destroy
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
has_many :folder_links, -> { where :target_type => 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :file_links, -> { where :target_type => 'DmsfFile' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :url_links, -> { where :target_type => 'DmsfUrl' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :referenced_links, -> { where :target_type => 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'target_id', :dependent => :destroy
|
||||
has_many :locks, -> { where(entity_type: 1).order("#{DmsfLock.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||
accepts_nested_attributes_for :user, :project, :folder, :subfolders, :files, :folder_links, :file_links, :url_links, :referenced_links, :locks
|
||||
else
|
||||
has_many :folder_links, :class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id',
|
||||
:conditions => { :target_type => 'DmsfFolder' }, :dependent => :destroy
|
||||
has_many :file_links, :class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id',
|
||||
:conditions => { :target_type => 'DmsfFile' }, :dependent => :destroy
|
||||
has_many :url_links, :class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id',
|
||||
:conditions => { :target_type => 'DmsfUrl' }, :dependent => :destroy
|
||||
has_many :referenced_links, :class_name => 'DmsfLink', :foreign_key => 'target_id',
|
||||
:conditions => { :target_type => 'DmsfFolder' }, :dependent => :destroy
|
||||
has_many :locks, :class_name => 'DmsfLock', :foreign_key => 'entity_id',
|
||||
:order => "#{DmsfLock.table_name}.updated_at DESC",
|
||||
:conditions => {:entity_type => 1},
|
||||
:dependent => :destroy
|
||||
end
|
||||
has_many :folder_links, -> { where :target_type => 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :file_links, -> { where :target_type => 'DmsfFile' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :url_links, -> { where :target_type => 'DmsfUrl' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'dmsf_folder_id', :dependent => :destroy
|
||||
has_many :referenced_links, -> { where :target_type => 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'target_id', :dependent => :destroy
|
||||
has_many :locks, -> { where(entity_type: 1).order("#{DmsfLock.table_name}.updated_at DESC") },
|
||||
:class_name => 'DmsfLock', :foreign_key => 'entity_id', :dependent => :destroy
|
||||
accepts_nested_attributes_for :user, :project, :folder, :subfolders, :files, :folder_links, :file_links, :url_links, :referenced_links, :locks
|
||||
|
||||
scope :visible, lambda { |*args|
|
||||
where(deleted: false)
|
||||
@ -72,19 +57,11 @@ class DmsfFolder < ActiveRecord::Base
|
||||
|
||||
acts_as_customizable
|
||||
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
acts_as_searchable :columns => ["#{self.table_name}.title", "#{self.table_name}.description"],
|
||||
:project_key => 'project_id',
|
||||
:date_column => 'updated_at',
|
||||
:permission => :view_dmsf_files,
|
||||
:scope => self.joins(:project)
|
||||
else
|
||||
acts_as_searchable :columns => ["#{self.table_name}.title", "#{self.table_name}.description"],
|
||||
:project_key => 'project_id',
|
||||
:date_column => 'updated_at',
|
||||
:permission => :view_dmsf_files,
|
||||
:include => :project
|
||||
end
|
||||
acts_as_searchable :columns => ["#{self.table_name}.title", "#{self.table_name}.description"],
|
||||
:project_key => 'project_id',
|
||||
:date_column => 'updated_at',
|
||||
:permission => :view_dmsf_files,
|
||||
:scope => self.joins(:project)
|
||||
|
||||
acts_as_event :title => Proc.new {|o| o.title},
|
||||
:description => Proc.new {|o| o.description },
|
||||
|
||||
@ -42,13 +42,8 @@ class DmsfLink < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
scope :visible, -> { where(deleted: false) }
|
||||
scope :deleted, -> { where(deleted: true) }
|
||||
else
|
||||
scope :visible, where(:deleted => false)
|
||||
scope :deleted, where(:deleted => true)
|
||||
end
|
||||
scope :visible, -> { where(deleted: false) }
|
||||
scope :deleted, -> { where(deleted: true) }
|
||||
|
||||
def target_folder_id
|
||||
if self.target_type == DmsfFolder.model_name.to_s
|
||||
|
||||
@ -19,11 +19,8 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
class DmsfWorkflow < ActiveRecord::Base
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
has_many :dmsf_workflow_steps, -> { order 'step ASC, operator DESC' }, :dependent => :destroy
|
||||
else
|
||||
has_many :dmsf_workflow_steps, :dependent => :destroy, :order => 'step ASC, operator DESC'
|
||||
end
|
||||
|
||||
has_many :dmsf_workflow_steps, -> { order 'step ASC, operator DESC' }, :dependent => :destroy
|
||||
|
||||
attr_accessible :name
|
||||
|
||||
|
||||
@ -32,35 +32,18 @@ module RedmineDmsf
|
||||
unloadable
|
||||
alias_method_chain :copy, :dmsf
|
||||
|
||||
if (Rails::VERSION::MAJOR > 3)
|
||||
has_many :dmsf_files, -> { where dmsf_folder_id: nil},
|
||||
:class_name => 'DmsfFile', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :dmsf_folders, -> {where dmsf_folder_id: nil},
|
||||
:class_name => 'DmsfFolder', :foreign_key => 'project_id',
|
||||
:dependent => :destroy
|
||||
has_many :dmsf_workflows, :dependent => :destroy
|
||||
has_many :folder_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :file_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfFile' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :url_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfUrl' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
else
|
||||
has_many :dmsf_files, :class_name => 'DmsfFile', :foreign_key => 'project_id',
|
||||
:conditions => { :dmsf_folder_id => nil }, :dependent => :destroy
|
||||
has_many :dmsf_folders, :class_name => 'DmsfFolder', :foreign_key => 'project_id',
|
||||
:conditions => {:dmsf_folder_id => nil}, :dependent => :destroy
|
||||
has_many :dmsf_workflows, :dependent => :destroy
|
||||
has_many :folder_links, :class_name => 'DmsfLink', :foreign_key => 'project_id',
|
||||
:conditions => { :dmsf_folder_id => nil, :target_type => 'DmsfFolder' },
|
||||
:dependent => :destroy
|
||||
has_many :file_links, :class_name => 'DmsfLink', :foreign_key => 'project_id',
|
||||
:conditions => { :dmsf_folder_id => nil, :target_type => 'DmsfFile' },
|
||||
:dependent => :destroy
|
||||
has_many :url_links, :class_name => 'DmsfLink', :foreign_key => 'project_id',
|
||||
:conditions => { :dmsf_folder_id => nil, :target_type => 'DmsfUrl' },
|
||||
:dependent => :destroy
|
||||
end
|
||||
has_many :dmsf_files, -> { where dmsf_folder_id: nil},
|
||||
:class_name => 'DmsfFile', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :dmsf_folders, -> {where dmsf_folder_id: nil},
|
||||
:class_name => 'DmsfFolder', :foreign_key => 'project_id',
|
||||
:dependent => :destroy
|
||||
has_many :dmsf_workflows, :dependent => :destroy
|
||||
has_many :folder_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfFolder' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :file_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfFile' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
has_many :url_links, -> { where dmsf_folder_id: nil, target_type: 'DmsfUrl' },
|
||||
:class_name => 'DmsfLink', :foreign_key => 'project_id', :dependent => :destroy
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user