diff --git a/app/models/ticket.rb b/app/models/ticket.rb index d1e5d9d1f..0d27eb846 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -2,6 +2,7 @@ class Ticket < ApplicationRecord belongs_to_creator belongs_to :claimant, class_name: "User", optional: true belongs_to :handler, class_name: "User", optional: true + belongs_to :accused, class_name: "User", optional: true belongs_to :post_report_reason, foreign_key: "report_reason", optional: true before_validation :initialize_fields, on: :create after_initialize :validate_type @@ -196,6 +197,18 @@ class Ticket < ApplicationRecord def initialize_fields self.status = "pending" + case qtype + when "blip" + self.accused_id = Blip.find(disp_id).creator_id + when "forum" + self.accused_id = ForumPost.find(disp_id).creator_id + when "comment" + self.accused_id = Comment.find(disp_id).creator_id + when "dmail" + self.accused_id = Dmail.find(disp_id).from_id + when "user" + self.accused_id = disp_id + end end end @@ -218,7 +231,11 @@ class Ticket < ApplicationRecord if params[:accused_name].present? user_id = User.name_to_id(params[:accused_name]) - q = q.where('disp_id = ? and qtype = ?', user_id, 'user') if user_id + q = q.where('accused_id = ?', user_id) if user_id + end + + if params[:accused_id].present? + q = q.where('accused_id = ?', params[:accused_id].to_i) end if params[:qtype].present? diff --git a/app/views/tickets/_search.html.erb b/app/views/tickets/_search.html.erb index 53218e566..5fc71d91e 100644 --- a/app/views/tickets/_search.html.erb +++ b/app/views/tickets/_search.html.erb @@ -3,6 +3,7 @@ <%= f.input :creator_name, label: "Reporter", autocomplete: "user" %> <%= f.input :creator_id, label: "Reporter ID" %> <%= f.input :accused_name, label: "Accused", autocomplete: "user" %> + <%= f.input :accused_id, label: "Accused ID" %> <%= f.input :reason %> <% end %> <%= f.input :qtype, label: "Type", collection: [ diff --git a/app/views/tickets/index.html.erb b/app/views/tickets/index.html.erb index ab20ea5fb..be94e023c 100644 --- a/app/views/tickets/index.html.erb +++ b/app/views/tickets/index.html.erb @@ -9,6 +9,7 @@ ID <% if CurrentUser.is_moderator? %> Reporter + Accused Claimed By <% end %> Type @@ -25,13 +26,18 @@ <%= link_to ticket.id, ticket_path(ticket) %> <% if CurrentUser.is_moderator? %> <%= link_to_user ticket.creator %> - - <% if ticket.claimant.nil? %> - Unclaimed - <% else %> - <%= link_to_user ticket.claimant %> - <% end %> - + + <% if ticket.accused %> + <%= link_to_user ticket.accused %> + <% end %> + + + <% if ticket.claimant.nil? %> + Unclaimed + <% else %> + <%= link_to_user ticket.claimant %> + <% end %> + <% end %> <%= link_to ticket.type_title, ticket_path(ticket) %> diff --git a/db/fixes/108_ticket_accuser_id.rb b/db/fixes/108_ticket_accuser_id.rb new file mode 100755 index 000000000..2e3cd763a --- /dev/null +++ b/db/fixes/108_ticket_accuser_id.rb @@ -0,0 +1,23 @@ +#!/usr/bin/env ruby + +require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "config", "environment")) + +Ticket.where(qtype: "blip").find_each do |ticket| + ticket.update_column(:accused_id, Blip.find_by(id: ticket.disp_id)&.creator_id) +end + +Ticket.where(qtype: "forum").find_each do |ticket| + ticket.update_column(:accused_id, ForumPost.find_by(id: ticket.disp_id)&.creator_id) +end + +Ticket.where(qtype: "comment").find_each do |ticket| + ticket.update_column(:accused_id, Comment.find_by(id: ticket.disp_id)&.creator_id) +end + +Ticket.where(qtype: "dmail").find_each do |ticket| + ticket.update_column(:accused_id, Dmail.find_by(id: ticket.disp_id)&.from_id) +end + +Ticket.where(qtype: "user").find_each do |ticket| + ticket.update_column(:accused_id, ticket.disp_id) +end diff --git a/db/migrate/20230506161827_add_ticket_user_id.rb b/db/migrate/20230506161827_add_ticket_user_id.rb new file mode 100644 index 000000000..bc8d357c8 --- /dev/null +++ b/db/migrate/20230506161827_add_ticket_user_id.rb @@ -0,0 +1,6 @@ +class AddTicketUserId < ActiveRecord::Migration[7.0] + def change + add_column :tickets, :accused_id, :integer + add_foreign_key :tickets, :users, column: :accused_id + end +end diff --git a/db/structure.sql b/db/structure.sql index 0be0e7394..76002e7e1 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1977,7 +1977,8 @@ CREATE TABLE public.tickets ( handler_id integer DEFAULT 0 NOT NULL, claimant_id integer, created_at timestamp without time zone NOT NULL, - updated_at timestamp without time zone NOT NULL + updated_at timestamp without time zone NOT NULL, + accused_id integer ); @@ -4327,6 +4328,14 @@ ALTER TABLE ONLY public.staff_audit_logs ADD CONSTRAINT fk_rails_02329e5ef9 FOREIGN KEY (user_id) REFERENCES public.users(id); +-- +-- Name: tickets fk_rails_45cd696dba; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.tickets + ADD CONSTRAINT fk_rails_45cd696dba FOREIGN KEY (accused_id) REFERENCES public.users(id); + + -- -- Name: mascots fk_rails_9901e810fa; Type: FK CONSTRAINT; Schema: public; Owner: - -- @@ -4628,6 +4637,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20230226152600'), ('20230312103728'), ('20230314170352'), -('20230316084945'); +('20230316084945'), +('20230506161827');