From a153391615aa38dc4b1bd9bd7c635b4fbca06ce6 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Thu, 14 Apr 2016 16:49:17 +0200 Subject: [PATCH] Moved moderation code to new moderate controller --- app/assets/javascripts/moderate.coffee | 3 ++ app/assets/stylesheets/moderate.scss | 3 ++ app/controllers/moderate_controller.rb | 30 ++++++++++++++++++++ app/controllers/packages_controller.rb | 22 -------------- app/helpers/moderate_helper.rb | 2 ++ app/views/layouts/_topbar.slim | 4 +-- app/views/moderate/index.slim | 24 ++++++++++++++++ app/views/packages/details.slim | 4 --- app/views/packages/moderate.slim | 19 ------------- config/routes.rb | 2 +- test/controllers/moderate_controller_test.rb | 7 +++++ test/helpers/moderate_helper_test.rb | 7 +++++ 12 files changed, 79 insertions(+), 48 deletions(-) create mode 100644 app/assets/javascripts/moderate.coffee create mode 100644 app/assets/stylesheets/moderate.scss create mode 100644 app/controllers/moderate_controller.rb create mode 100644 app/helpers/moderate_helper.rb create mode 100644 app/views/moderate/index.slim delete mode 100644 app/views/packages/moderate.slim create mode 100644 test/controllers/moderate_controller_test.rb create mode 100644 test/helpers/moderate_helper_test.rb diff --git a/app/assets/javascripts/moderate.coffee b/app/assets/javascripts/moderate.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/app/assets/javascripts/moderate.coffee @@ -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/ diff --git a/app/assets/stylesheets/moderate.scss b/app/assets/stylesheets/moderate.scss new file mode 100644 index 0000000..5571dd0 --- /dev/null +++ b/app/assets/stylesheets/moderate.scss @@ -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/ diff --git a/app/controllers/moderate_controller.rb b/app/controllers/moderate_controller.rb new file mode 100644 index 0000000..db619a7 --- /dev/null +++ b/app/controllers/moderate_controller.rb @@ -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 diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index 0042f21..690e635 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -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." diff --git a/app/helpers/moderate_helper.rb b/app/helpers/moderate_helper.rb new file mode 100644 index 0000000..c8884bf --- /dev/null +++ b/app/helpers/moderate_helper.rb @@ -0,0 +1,2 @@ +module ModerateHelper +end diff --git a/app/views/layouts/_topbar.slim b/app/views/layouts/_topbar.slim index e5d917a..d2fc92c 100644 --- a/app/views/layouts/_topbar.slim +++ b/app/views/layouts/_topbar.slim @@ -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 diff --git a/app/views/moderate/index.slim b/app/views/moderate/index.slim new file mode 100644 index 0000000..4252349 --- /dev/null +++ b/app/views/moderate/index.slim @@ -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. diff --git a/app/views/packages/details.slim b/app/views/packages/details.slim index a0b31c7..6663f6c 100644 --- a/app/views/packages/details.slim +++ b/app/views/packages/details.slim @@ -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%' diff --git a/app/views/packages/moderate.slim b/app/views/packages/moderate.slim deleted file mode 100644 index bdcc00e..0000000 --- a/app/views/packages/moderate.slim +++ /dev/null @@ -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. diff --git a/config/routes.rb b/config/routes.rb index f25d305..0734668 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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 diff --git a/test/controllers/moderate_controller_test.rb b/test/controllers/moderate_controller_test.rb new file mode 100644 index 0000000..3e86c60 --- /dev/null +++ b/test/controllers/moderate_controller_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class ModerateControllerTest < ActionController::TestCase + def test_sanity + flunk "Need real tests" + end +end diff --git a/test/helpers/moderate_helper_test.rb b/test/helpers/moderate_helper_test.rb new file mode 100644 index 0000000..5bdd5e6 --- /dev/null +++ b/test/helpers/moderate_helper_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class ModerateHelperTest < ActionView::TestCase + def test_sanity + flunk "Need real tests" + end +end