before_action :find_issue, only: [:show, :resolve, :reopen, :ignore]
def index
- if params[:search_by_user].present?
- @user = User.find_by_display_name(params[:search_by_user])
- if @user.present?
- @issues = Issue.where(reported_user_id: @user.id).order(:status)
+ # Get user role
+ if @user.administrator?
+ @user_role = "administrator"
+ else
+ @user_role = "moderator"
+ end
+
+ # If search
+ if params[:search_by_user]
+ @find_user = User.find_by_display_name(params[:search_by_user])
+ if @find_user
+ @issues = Issue.where(reported_user_id: @find_user.id, issue_type: @user_role).order(:status)
else
- @issues = Issue.all.order(:status)
- redirect_to issues_path, notice: t('issues.index.search.user_not_found')
+ @issues = Issue.where(issue_type: @user_role).order(:status)
+ notice = t('issues.index.search.user_not_found')
end
-
- if @user.present? and not @issues.present?
- @issues = Issue.all.order(:status)
- redirect_to issues_path, notice: t('issues.index.search.issues_not_found')
+
+ if @find_user !=nil and @issues.first == nil
+ @issues = Issue.where(issue_type: @user_role).order(:status)
+ notice = t('issues.index.search.issues_not_found')
end
+
+ if notice
+ redirect_to issues_path, notice: notice
+ end
+
else
- @issues = Issue.all.order(:status)
+ @issues = Issue.where(issue_type: @user_role).order(:status)
end
end
@unread_reports = @issue.unread_reports
@comments = @issue.comments
@related_issues = @issue.user.issues
+ if @issue.updated_by
+ @updated_by_admin = User.find(@issue.updated_by)
+ end
end
def new
end
def create
+ admin_issues = [ 'DiaryEntry', 'DiaryComment', 'User']
+ moderator_issues = []
@issue = Issue.find_by_reportable_id_and_reportable_type(params[:reportable_id],params[:reportable_type])
# Check if Issue alrwady exists
if !@issue
@issue = Issue.find_or_initialize_by(issue_params)
+ @issue.updated_by = nil
@admins = UserRole.where(role: "administrator")
@admins.each do |admin|
Notifier.new_issue_notification(User.find(admin.user_id)).deliver_now
end
+
+ # Reassign to moderators if it is a moderator issue
+ @issue.issue_type = "administrator"
+ if moderator_issues.include? @issue.reportable.class.name
+ reassign_issue
+ end
end
# Check if details provided are sufficient
@issue = Issue.find(params[:id])
@issue_comment = @issue.comments.build(issue_comment_params)
@issue_comment.commenter_user_id = @user.id
+ if params[:reassign]
+ reassign_issue
+ @issue_comment.reassign = true
+ end
@issue_comment.save!
+ @issue.updated_by = @user.id
+ @issue.save!
redirect_to @issue
end
def ignore
if @issue.ignore
+ @issue.updated_by = @user.id
@issue.save!
redirect_to @issue, notice: t('issues.ignored')
else
def reopen
if @issue.reopen
+ @issue.updated_by = @user.id
@issue.save!
redirect_to @issue, notice: t('issues.reopened')
else
end
end
+ # Reassign Issues between Administrators and Moderators
+ def reassign_issue
+ if @issue.issue_type == "moderator"
+ @issue.issue_type = "administrator"
+ else
+ @issue.issue_type = "moderator"
+ end
+ @issue.save!
+ end
private
# Check if more statuses are needed
enum status: %w( open ignored resolved )
+ enum type: %w( administrator moderator )
scope :with_status, -> (issue_status) { where(:status => statuses[issue_status])}
end
end
-
end
<%= link_to t('diary_entry.diary_entry.edit_link'), :action => 'edit', :display_name => diary_entry.user.display_name, :id => diary_entry.id %>
<% end %>
+ <% if @user and diary_entry.user.id != @user.id %>
<li>
- <% if @user and diary_entry.user.id != @user.id %>
<%= link_to t('issues.report'), new_issue_url(reportable_id: diary_entry.id, reportable_type: diary_entry.class.name, reported_user_id: diary_entry.user.id) %>
- <% end %>
</li>
+ <% end %>
+
<%= if_administrator(:li) do %>
<%= link_to t('diary_entry.diary_entry.hide_link'), hide_diary_entry_path(:display_name => diary_entry.user.display_name, :id => diary_entry.id), :method => :post, :data => { :confirm => t('diary_entry.diary_entry.confirm') } %>
<% end %>
</div>
<b> <%= link_to comment.user.display_name, :controller => :user,:action =>:view, :display_name => comment.user.display_name %> </b> <br/>
<%= comment.body %>
+
+ <% if comment.reassign %>
+ <br/>
+ <i><%= t('issues.show.comments.reassign') %></i>
+ <% end %>
</div>
<span class="deemphasize">
On <%= l comment.created_at.to_datetime, :format => :long %> </span>
<div class="comment">
<%= form_for :issue_comment, :url => { :action => 'comment', :id => @issue.id, :user_id => @user.id } do |f| %>
<%= richtext_area :issue_comment, :body, :cols => 10, :rows => 8 %>
+ <%= label_tag t('issues.show.comments.reassign_param') %> <%= check_box_tag :reassign, true %>
+ <br/>
+ <br/>
<%= submit_tag 'Submit' %>
<% end %>
</div>
\ No newline at end of file
<p id= "notice"><%= notice %></p>
<% content_for :heading do %>
- <h1>List of existing Issues:</h1>
+ <h1>List of <%= @user_role %> issues:</h1>
<% end %>
<%= form_tag(issues_path, :method => :get) do %>
<p>Issue type: <%= @issue.reportable_type %></p>
<p class="deemphasize">
<small>
- <%= @issue.reports.count %> reports | First reported: <%= l @issue.created_at.to_date, :format => :long %> <%= "| Last resolved at #{l(@issue.resolved_at.to_datetime, :format =>:long)}" if @issue.resolved_at? %>
+ <%= @issue.reports.count %> reports | First reported: <%= l @issue.created_at.to_date, :format => :long %> <%= "| Last resolved at #{l(@issue.resolved_at.to_datetime, :format =>:long)}" if @issue.resolved_at? %> <%= "| Last updated at #{l(@issue.updated_at.to_datetime, :format => :long)} by #{@updated_by_admin.display_name}" if @updated_by_admin %>
</small>
</p>
<p><%= link_to t('issues.resolve'), resolve_issue_url(@issue), :method => :post if @issue.may_resolve? %></p>
provide_details: Please provide the required details
new:
details: Please provide some more details into the problem. (This field cannot be left blank!)
+ show:
+ comments:
+ reassign: The Issue was reassigned
+ reassign_param: Reassign Issue?
resolved: Issue status has been set to 'Resolved'
ignored: Issue status has been set to 'Ignored'
reopened: Issue status has been set to 'Open'
provide_details: Please provide the required details
new:
details: Please provide some more details into the problem. (This field cannot be left blank!)
+ show:
+ comments:
+ reassign: The Issue was reassigned
+ reassign_param: Reassign Issue?
resolved: Issue status has been set to 'Resolved'
ignored: Issue status has been set to 'Ignored'
reopened: Issue status has been set to 'Open'
t.integer :reportable_id, :null => false
t.integer :reported_user_id, :null => false
t.integer :status
+ t.string :issue_type
t.datetime :resolved_at
t.integer :resolved_by
t.datetime :created_at
t.datetime :updated_at
+ t.integer :updated_by
t.timestamps null: false
end
t.integer :commenter_user_id
t.text :body
t.datetime :created_at
-
+ t.boolean :reassign
t.timestamps null: false
end
AS '$libdir/libpgosm', 'xid_to_int4';
-SET default_tablespace = '';
-
-SET default_with_oids = false;
-
SET default_tablespace = '';
SET default_with_oids = false;
commenter_user_id integer,
body text,
created_at timestamp without time zone NOT NULL,
+ reassign boolean,
updated_at timestamp without time zone NOT NULL
);
reportable_id integer NOT NULL,
reported_user_id integer NOT NULL,
status integer,
+ issue_type character varying,
resolved_at timestamp without time zone,
resolved_by 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,
+ updated_by integer
);