Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions app/controllers/admin/reports_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ class ReportsController < Admin::ApplicationController
def index
authorize :admin, :access_reports?

@reports = Report.includes(:reporter, :project).order(created_at: :desc)
@reports = Project::Report.includes(:reporter, :project).order(created_at: :desc)

@reports = @reports.where(status: params[:status]) if params[:status].present?
@reports = @reports.where(reason: params[:reason]) if params[:reason].present?

@counts = {
pending: Report.pending.count,
reviewed: Report.reviewed.count,
dismissed: Report.dismissed.count
pending: Project::Report.pending.count,
reviewed: Project::Report.reviewed.count,
dismissed: Project::Report.dismissed.count
}
end

Expand All @@ -34,15 +34,15 @@ def dismiss
private

def set_report
@report = Report.find(params[:id])
@report = Project::Report.find(params[:id])
end

def update_status(new_status, notice_message)
old_status = @report.status

if @report.update(status: new_status)
PaperTrail::Version.create!(
item_type: "Report",
item_type: "Project::Report",
item_id: @report.id,
event: "update",
whodunnit: current_user.id,
Expand Down
50 changes: 50 additions & 0 deletions app/controllers/project/fire_events_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
class Project::FireEventsController < ApplicationController
before_action -> { authorize :admin }
before_action :set_project!

def create
if @project.fire?
return render json: { message: "Project is already marked as 🔥" }, status: :unprocessable_entity
end

fire_event = Post::FireEvent.new(body: "🔥 #{current_user.display_name} marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)")
post = @project.posts.build(user: current_user, postable: fire_event)

PaperTrail.request(whodunnit: current_user.id) do
unless post.save
errors = (post.errors.full_messages + fire_event.errors.full_messages).uniq
return render json: { message: errors.to_sentence.presence || "Failed to mark project as 🔥" }, status: :unprocessable_entity
end

@project.mark_fire!(current_user)
log_version!("mark_fire", marked_fire_by_id: current_user.id, created_post_id: post.id)
end

Project::PostToMagicJob.perform_later(@project)
Project::MagicHappeningLetterJob.perform_later(@project)
render json: { message: "Project marked as 🔥!", fire: true }
end

def destroy
PaperTrail.request(whodunnit: current_user.id) do
@project.unmark_fire!
log_version!("unmark_fire")
end
render json: { message: "Project unmarked as 🔥", fire: false }
end

private

def set_project!
@project = Project.find_by(id: params[:project_id])
render json: { message: "Project not found" }, status: :not_found unless @project
end

def log_version!(event, changes = {})
PaperTrail::Version.create!(
item_type: "Project", item_id: @project.id, event: event, whodunnit: current_user.id,
object_changes: { admin_action: [ nil, event ], **changes.transform_values { [ nil, _1 ] } }
)
end
end

25 changes: 25 additions & 0 deletions app/controllers/project/reports_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
class Project::ReportsController < ApplicationController
def create
authorize :report, :create?
@project = ::Project.find(params[:project_id])

if current_user.reports.exists?(project: @project)
redirect_back_or_to project_path(@project), alert: "You have already reported this project."
return
end

@report = current_user.reports.build(report_params.merge(project: @project))

if @report.save
redirect_back_or_to project_path(@project), notice: "Report submitted. Thank you for helping us maintain quality."
else
redirect_back_or_to project_path(@project), alert: @report.errors.full_messages.to_sentence
end
end

private

def report_params
params.require(:project_report).permit(:reason, :details)
end
end
61 changes: 1 addition & 60 deletions app/controllers/projects_controller.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class ProjectsController < ApplicationController
before_action :set_project_minimal, only: [ :edit, :update, :destroy, :ship, :update_ship, :submit_ship, :mark_fire, :unmark_fire ]
before_action :set_project_minimal, only: [ :edit, :update, :destroy, :ship, :update_ship, :submit_ship ]
before_action :set_project, only: [ :show ]

def index
Expand Down Expand Up @@ -199,65 +199,6 @@ def submit_ship
redirect_to @project
end

def mark_fire
authorize :admin, :manage_projects?

return render(json: { message: "Project not found" }, status: :not_found) unless @project

PaperTrail.request(whodunnit: current_user.id) do
fire_event = Post::FireEvent.new(
body: "🔥 #{current_user.display_name} marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)"
)
post = @project.posts.build(user: current_user, postable: fire_event)

if post.save
@project.mark_fire!(current_user)

PaperTrail::Version.create!(
item_type: "Project",
item_id: @project.id,
event: "mark_fire",
whodunnit: current_user.id,
object_changes: {
admin_action: [ nil, "mark_fire" ],
marked_fire_by_id: [ nil, current_user.id ],
created_post_id: [ nil, post.id ]
}
)

Project::PostToMagicJob.perform_later(@project)
Project::MagicHappeningLetterJob.perform_later(@project)

render json: { message: "Project marked as 🔥!", fire: true }, status: :ok
else
errors = (post.errors.full_messages + fire_event.errors.full_messages).uniq
render json: { message: errors.to_sentence.presence || "Failed to mark project as 🔥" }, status: :unprocessable_entity
end
end
end

def unmark_fire
authorize :admin, :manage_projects?

return render(json: { message: "Project not found" }, status: :not_found) unless @project

PaperTrail.request(whodunnit: current_user.id) do
@project.unmark_fire!

PaperTrail::Version.create!(
item_type: "Project",
item_id: @project.id,
event: "unmark_fire",
whodunnit: current_user.id,
object_changes: {
admin_action: [ nil, "unmark_fire" ]
}
)

render json: { message: "Project unmarked as 🔥", fire: false }, status: :ok
end
end

def follow
return redirect_to(project_path(params[:id]), alert: "Please sign in first.") unless current_user

Expand Down
20 changes: 0 additions & 20 deletions app/controllers/reports_controller.rb

This file was deleted.

43 changes: 4 additions & 39 deletions app/controllers/votes_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,49 +23,14 @@ def index

def new
authorize :vote, :new?
project_id = Project.looking_for_votes
.votable_by(current_user)
.limit(10)
.pluck(:id)
.sample

@project = Project.find_by(id: project_id)
@devlogs = if @project
@project.posts.includes(:postable, :user).order(created_at: :desc).limit(5)
else
[]
end
redirect_to root_path, alert: "Voting is currently disabled."
nil
end

def create
authorize :vote, :create?
@project = Project.find(params[:project_id])

created_votes = []

Vote.transaction do
votes_params = params.require(:votes)

Rails.logger.info "VOTE PARAMS: time=#{params[:time_taken_to_vote]}, repo=#{params[:repo_url_clicked]}, demo=#{params[:demo_url_clicked]}"

votes_params.values.each do |vote_params|
created_votes << current_user.votes.create!(
project: @project,
category: vote_params[:category],
score: vote_params[:score],
time_taken_to_vote: params[:time_taken_to_vote].to_i,
repo_url_clicked: params[:repo_url_clicked] == "true",
demo_url_clicked: params[:demo_url_clicked] == "true",
reason: params[:reason].presence
)
end
end

share_vote_to_slack(created_votes, params[:reason].presence) if current_user.send_votes_to_slack

redirect_to new_vote_path, notice: "Voted!"
rescue ActiveRecord::RecordInvalid => e
redirect_to new_vote_path, alert: e.record.errors.full_messages.to_sentence
redirect_to root_path, alert: "Voting is currently disabled."
nil
end

private
Expand Down
3 changes: 0 additions & 3 deletions app/javascript/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,6 @@ application.register("load-more", LoadMoreController);
import DialogueIterationController from "./dialogue_iteration_controller";
application.register("dialogue-iteration", DialogueIterationController);

import ProjectFireController from "./project_fire_controller";
application.register("project-fire", ProjectFireController);

import ModalController from "./modal_controller";
application.register("modal", ModalController);

Expand Down
61 changes: 0 additions & 61 deletions app/javascript/controllers/project_fire_controller.js

This file was deleted.

Loading