Allow hiding and un-hiding of screenshot by moderators
This commit is contained in:
parent
f31502c333
commit
5d0e4a520e
6 changed files with 62 additions and 10 deletions
|
|
@ -176,6 +176,40 @@ class PackagesController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def hide_screenshot
|
||||
# Is the user allowed to hide this screenshot?
|
||||
@screenshot = Screenshot.find(params[:id])
|
||||
|
||||
# Check if the user is allowed to change this screenshot
|
||||
# - Is this the user's own screenshot? (anonymous)
|
||||
if can? :hide, @screenshot
|
||||
auditlog "Screenshot #{@screenshot.id} hidden",
|
||||
package: @screenshot.package
|
||||
@screenshot.hide!
|
||||
flash['notice'] = "Screenshot hidden."
|
||||
redirect_back(fallback_location: package_path(name: @screenshot.package.name))
|
||||
else
|
||||
head :forbidden
|
||||
end
|
||||
end
|
||||
|
||||
def unhide_screenshot
|
||||
# Is the user allowed to unhide this screenshot?
|
||||
@screenshot = Screenshot.find(params[:id])
|
||||
|
||||
# Check if the user is allowed to change this screenshot
|
||||
# - Is this the user's own screenshot? (anonymous)
|
||||
if can? :unhide, @screenshot
|
||||
auditlog "Screenshot #{@screenshot.id} un-hidden",
|
||||
package: @screenshot.package
|
||||
@screenshot.unhide!
|
||||
flash['notice'] = "Screenshot un-hidden."
|
||||
redirect_back(fallback_location: package_path(name: @screenshot.package.name))
|
||||
else
|
||||
head :forbidden
|
||||
end
|
||||
end
|
||||
|
||||
def delete_screenshot
|
||||
# Is the user allowed to delete the screenshot?
|
||||
@screenshot = Screenshot.find(params[:id])
|
||||
|
|
|
|||
|
|
@ -32,18 +32,19 @@ class Ability
|
|||
# See the wiki for details:
|
||||
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
|
||||
|
||||
# Everybody can see public screenshots
|
||||
can :view, Screenshot, approved: true, hidden:false
|
||||
|
||||
if user.present? # Logged-in users
|
||||
# Allow to view all public/approved screenshots
|
||||
can :view, Screenshot, approved: true
|
||||
# Allow to view any own uploads (even not-yet-approved)
|
||||
# Allow to view own uploads (even not-yet-approved)
|
||||
can :view, Screenshot, user_id: user.id
|
||||
can :destroy, Screenshot, user_id: user.id
|
||||
|
||||
if user.admin_role?
|
||||
can :approve, Screenshot
|
||||
can :destroy, Screenshot
|
||||
can :hide, Screenshot
|
||||
can :unhide, Screenshot
|
||||
can :hide, Screenshot, hidden: false
|
||||
can :unhide, Screenshot, hidden: true
|
||||
can :destroy, User
|
||||
can :view, Screenshot
|
||||
can :destroy, Package
|
||||
|
|
@ -51,11 +52,10 @@ class Ability
|
|||
end
|
||||
if user.moderator_role?
|
||||
can :approve, Screenshot
|
||||
can :hide, Screenshot
|
||||
can :hide, Screenshot, hidden: false
|
||||
can :unhide, Screenshot, hidden: true
|
||||
can :view, Screenshot
|
||||
end
|
||||
else # Nobody logged in
|
||||
can :view, Screenshot, approved: true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ class Screenshot < ApplicationRecord
|
|||
# Default sorting:
|
||||
# - unapproved first (to see them at the top when moderating)
|
||||
# - otherwise show newest first
|
||||
default_scope { order(approved: :asc, created_at: :desc) }
|
||||
default_scope { order(approved: :asc, hidden: :asc, created_at: :desc) }
|
||||
|
||||
# Shrine
|
||||
include ImageUploader::Attachment(:simage) # adds an `simage` virtual attribute
|
||||
|
|
@ -63,6 +63,16 @@ class Screenshot < ApplicationRecord
|
|||
self.save!
|
||||
end
|
||||
|
||||
# Hide a screenshot from the public. Moderator level can do this.
|
||||
def hide!
|
||||
self.hidden = true
|
||||
self.save!
|
||||
end
|
||||
def unhide!
|
||||
self.hidden = false
|
||||
self.save!
|
||||
end
|
||||
|
||||
# Get the newest screenshots regardless of the package it belongs to
|
||||
def self.newest
|
||||
self.order(created_at: :desc)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue