Moved moderation code to new moderate controller

This commit is contained in:
Christoph Haas 2016-04-14 16:49:17 +02:00
parent b32f26a1b8
commit a153391615
12 changed files with 79 additions and 48 deletions

View file

@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/

View file

@ -0,0 +1,3 @@
// Place all the styles related to the Moderate controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View file

@ -0,0 +1,30 @@
class ModerateController < ApplicationController
before_action :authenticate_user!
def index
# List of screenshots to be moderated
@pending_screenshots = Screenshot.where(approved: false)
# List of packages with pending screenshots
@pending_packages = Package.joins(:screenshots).where('screenshots.approved=false').distinct(:name)
# The next package that has pending screenshots…
@package = @pending_packages.first
# Number of screenshots that were already moderated (during this session)
session[:already_moderated] ||= 0
@moderated_screenshots = session[:already_moderated]
# Percentage of already moderated screenshots
@percent_moderated = 100 * (@moderated_screenshots+1) / (@moderated_screenshots + @pending_screenshots.count)
end
# Publish a screenshot from the moderation queue
def approve_screenshot
@screenshot = Screenshot.find(params[:id])
@screenshot.delete_reason = nil
@screenshot.markedfordelete = false
@screenshot.approved = true
@screenshot.save!
flash['notice'] = "Screenshot approved."
redirect_to package_path
end
end

View file

@ -1,5 +1,4 @@
class PackagesController < ApplicationController
before_action :authenticate_user!, only: [:moderate, :moderate_screenshot]
def list
@packages = query_packages
@ -17,16 +16,6 @@ class PackagesController < ApplicationController
@package = Package.find_by(name: params[:name])
end
def moderate
# List of screenshots to be moderated
@pending_screenshots = Screenshot.where(approved: false)
# Number of screenshots that were already moderated (during this session)
session[:already_moderated] ||= 0
@moderated_screenshots = session[:already_moderated]
# Percentage of already moderated screenshots
@percent_moderated = 100 * (@moderated_screenshots+1) / (@moderated_screenshots + @pending_screenshots.count)
end
def upload
raise "name not given" unless params[:name]
@package = Package.find_by(name: params[:name])
@ -116,17 +105,6 @@ class PackagesController < ApplicationController
redirect_to package_path
end
# Publish a screenshot from the moderation queue
def approve_screenshot
@screenshot = Screenshot.find(params[:id])
@screenshot.delete_reason = nil
@screenshot.markedfordelete = false
@screenshot.approved = true
@screenshot.save!
flash['notice'] = "Screenshot approved."
redirect_to package_path
end
private
# Send a dummy thumbnail reading "No screenshot available. Sorry."

View file

@ -0,0 +1,2 @@
module ModerateHelper
end

View file

@ -28,8 +28,8 @@ header
li.divider
// TODO: Show link for admin/moderation view if admin is logged in
- if user_signed_in?
li class=('active' if controller_name=='packages' and action_name=='moderate')
= link_to 'Moderate', packages_moderate_path
li class=('active' if controller_name=='moderate')
= link_to 'Moderate', moderate_path
li.has-form
- if user_signed_in?
= link_to "#{current_user.email} (Logout)", destroy_user_session_path, :method => :delete

View file

@ -0,0 +1,24 @@
.row
h1 Moderation queue
// Progress bar
.progress.warning role="progressbar" tabindex="0" aria-valuenow="20" aria-valuemin="0" aria-valuetext="25 percent" aria-valuemax="100"
span.progress-meter style="width: #{@percent_moderated}%"
p.progress-meter-text #{@percent_moderated}%
h2 Package: #{@package.name}
// Package list
.row.packagepage
.small-9.medium-10.columns
- if @pending_screenshots.length>0
- @pending_screenshots.each do |screenshot|
.row.listview
.small-12.columns
.text-center
a.black.fancybox href=screenshot.image.url(:large, timestamp: false) rel='fancybox-thumb' title=screenshot.caption
= image_tag(screenshot.image.url(:large, timestamp: false), alt: screenshot.caption)
.imgcaption =screenshot.caption
- else
p No screenshots left in the moderation queue. Great.

View file

@ -23,10 +23,6 @@
- elsif screenshot.approved
= render(partial: 'report_dropdown', locals: {screenshot: screenshot})
// Anonymous users can see their own screenshots
/ - if not screenshot.approved
- else
.row.listview
img src='/images/dummy/no-screenshots-available.svg' width='100%' style='padding: 0 10%'

View file

@ -1,19 +0,0 @@
// TODO: Show progressbar of how far the admin went through the moderation queue
.row
h1 Moderation queue
// Progress bar
.progress.warning role="progressbar" tabindex="0" aria-valuenow="20" aria-valuemin="0" aria-valuetext="25 percent" aria-valuemax="100"
span.progress-meter style="width: #{@percent_moderated}%"
p.progress-meter-text #{@percent_moderated}%
// Package list
.row.packagepage
.small-9.medium-10.columns
- if @pending_screenshots.length>0
- @pending_screenshots.each do |screenshot|
= screenshot.id
- else
p No screenshots left in the moderation queue. Great.

View file

@ -14,7 +14,7 @@ Debshots::Application.routes.draw do
get 'packages' => 'packages#grid', as: :packages_grid
get 'packages/list' => 'packages#list', as: :packages_list
get 'packages/moderate' => 'packages#moderate', as: :packages_moderate
get 'moderate' => 'moderate#index'
get 'package/:name' => 'packages#details', as: :package, name: /[^\/]+/
get 'upload', to: redirect('/packages')
get 'upload/:name' => 'packages#upload', as: :upload_package_by_name

View file

@ -0,0 +1,7 @@
require "test_helper"
class ModerateControllerTest < ActionController::TestCase
def test_sanity
flunk "Need real tests"
end
end

View file

@ -0,0 +1,7 @@
require "test_helper"
class ModerateHelperTest < ActionView::TestCase
def test_sanity
flunk "Need real tests"
end
end