Users are connected to screenshots now
This commit is contained in:
parent
020a864736
commit
a502e2295b
2 changed files with 57 additions and 10 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
class Screenshot < ApplicationRecord
|
class Screenshot < ApplicationRecord
|
||||||
belongs_to :package, :inverse_of=>:screenshots
|
belongs_to :package, inverse_of: :screenshots
|
||||||
|
belongs_to :user, inverse_of: :screenshots
|
||||||
|
|
||||||
has_attached_file :image,
|
has_attached_file :image,
|
||||||
styles: { :large => '800x600>', :thumb => '160x120>' },
|
styles: { :large => '800x600>', :thumb => '160x120>' },
|
||||||
|
|
@ -8,7 +9,7 @@ class Screenshot < ApplicationRecord
|
||||||
url: '/screenshots/:id_partition/:style.png'
|
url: '/screenshots/:id_partition/:style.png'
|
||||||
validates_attachment_content_type :image, :content_type => 'image/png'
|
validates_attachment_content_type :image, :content_type => 'image/png'
|
||||||
validates_with AttachmentSizeValidator, :attributes => :image, :less_than => 5.megabytes
|
validates_with AttachmentSizeValidator, :attributes => :image, :less_than => 5.megabytes
|
||||||
# validate :validate_image_is_unique
|
# validate :validate_image_is_unique
|
||||||
validates :delete_reason, length: { in: 5..100 }, allow_nil: true
|
validates :delete_reason, length: { in: 5..100 }, allow_nil: true
|
||||||
|
|
||||||
# Validator that checks if the image has already been uploaded.
|
# Validator that checks if the image has already been uploaded.
|
||||||
|
|
@ -17,8 +18,6 @@ class Screenshot < ApplicationRecord
|
||||||
# Currently this check makes sure that the same screenshot is not uploaded
|
# Currently this check makes sure that the same screenshot is not uploaded
|
||||||
# twice for the same package. However it allows the screenshot to be uploaded
|
# twice for the same package. However it allows the screenshot to be uploaded
|
||||||
# for two different packages. Restricting that further may happen later.
|
# for two different packages. Restricting that further may happen later.
|
||||||
|
|
||||||
# TODO: will fail if screenshot is updated because it finds its own image
|
|
||||||
def validate_image_is_unique
|
def validate_image_is_unique
|
||||||
# Look for images with the same checksum / image_fingerprint
|
# Look for images with the same checksum / image_fingerprint
|
||||||
if screenshot=Screenshot.find_by(image_fingerprint: image_fingerprint, package_id: self.package.id)
|
if screenshot=Screenshot.find_by(image_fingerprint: image_fingerprint, package_id: self.package.id)
|
||||||
|
|
@ -51,8 +50,11 @@ class Screenshot < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def uploader
|
def uploader
|
||||||
# TODO: Implement the ownership of images
|
if self.user
|
||||||
'Anonymous'
|
self.user.name
|
||||||
|
else
|
||||||
|
'Anonymous'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return Debshots 1.x path to allow migration of images into Paperclip filesystem schema
|
# Return Debshots 1.x path to allow migration of images into Paperclip filesystem schema
|
||||||
|
|
@ -88,13 +90,33 @@ class Screenshot < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return the number of screenshots that need to be approved
|
# Check if the user is allowed to change this screenshot
|
||||||
# def self.unapproved
|
def user_can_alter?
|
||||||
# self.where(approved: false)
|
# - Is this the user's own screenshot? (anonymous)
|
||||||
# end
|
if self.uploaderhash == session[:token]
|
||||||
|
logger.debug "Screenshot belongs to current anonymous user"
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
# - Is this the user's own screenshot? (anonymous)
|
||||||
|
if self.user = current_user
|
||||||
|
logger.debug "Screenshot belongs to user who is currently logged in"
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
# - Is the user an admin (=logged in)?
|
||||||
|
if current_user.can_admin?
|
||||||
|
logger.debug "User is an administrator and has super powers"
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
# Publish a screenshot from the moderation queue
|
# Publish a screenshot from the moderation queue
|
||||||
def approve_screenshot!
|
def approve_screenshot!
|
||||||
|
|
||||||
|
|
||||||
self.delete_reason = nil
|
self.delete_reason = nil
|
||||||
self.markedfordelete = false
|
self.markedfordelete = false
|
||||||
self.approved = true
|
self.approved = true
|
||||||
|
|
@ -118,4 +140,28 @@ class Screenshot < ApplicationRecord
|
||||||
def can_admin?
|
def can_admin?
|
||||||
self.admin == 1
|
self.admin == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Check whether an upload would require moderation
|
||||||
|
def can_upload_without_moderation?
|
||||||
|
# Admins can
|
||||||
|
true if self.can_admin
|
||||||
|
|
||||||
|
# Authenticated users with at least one approved screenshot
|
||||||
|
true if self.screenshots.where(approved: true).count >= 1
|
||||||
|
|
||||||
|
# Other visitors require moderation
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
|
def can_delete?
|
||||||
|
# Admins can
|
||||||
|
true if self.can_admin
|
||||||
|
|
||||||
|
# Authenticated users with at least one approved screenshot
|
||||||
|
true if self.screenshots.where(approved: true).count >= 1
|
||||||
|
|
||||||
|
# Other visitors require moderation
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
|
|
||||||
.row
|
.row
|
||||||
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
|
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
|
||||||
|
= f.hidden_field :provider, value: 'local'
|
||||||
.small-2.columns
|
.small-2.columns
|
||||||
b Admin only…
|
b Admin only…
|
||||||
.small-5.columns
|
.small-5.columns
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue