diff --git a/app/models/champ.rb b/app/models/champ.rb index c28f08d1c..89efe8f10 100644 --- a/app/models/champ.rb +++ b/app/models/champ.rb @@ -11,23 +11,6 @@ class Champ < ApplicationRecord scope :public_only, -> { where(private: false) } scope :private_only, -> { where(private: true) } - PIECE_JUSTIFICATIVE_FILE_MAX_SIZE = 200.megabytes - - PIECE_JUSTIFICATIVE_FILE_ACCEPTED_FORMATS = [ - "application/pdf", - "application/msword", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "application/vnd.ms-excel", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "application/vnd.ms-powerpoint", - "application/vnd.openxmlformats-officedocument.presentationml.presentation", - "application/vnd.oasis.opendocument.text", - "application/vnd.oasis.opendocument.presentation", - "application/vnd.oasis.opendocument.spreadsheet", - "image/png", - "image/jpeg" - ] - def public? !private? end @@ -64,28 +47,6 @@ class Champ < ApplicationRecord end end - def piece_justificative_file_errors - errors = [] - - if piece_justificative_file.attached? && piece_justificative_file.previous_changes.present? - if piece_justificative_file.blob.byte_size > PIECE_JUSTIFICATIVE_FILE_MAX_SIZE - errors << "Le fichier #{piece_justificative_file.filename.to_s} est trop lourd, il doit faire au plus #{PIECE_JUSTIFICATIVE_FILE_MAX_SIZE.to_s(:human_size, precision: 2)}" - end - - if !piece_justificative_file.blob.content_type.in?(PIECE_JUSTIFICATIVE_FILE_ACCEPTED_FORMATS) - errors << "Le fichier #{piece_justificative_file.filename.to_s} est dans un format que nous n'acceptons pas" - end - - # FIXME: add Clamav check - end - - if errors.present? - piece_justificative_file.purge - end - - errors - end - private def string_value diff --git a/app/models/champs/piece_justificative_champ.rb b/app/models/champs/piece_justificative_champ.rb index 8373686f7..2213a5579 100644 --- a/app/models/champs/piece_justificative_champ.rb +++ b/app/models/champs/piece_justificative_champ.rb @@ -1,10 +1,49 @@ class Champs::PieceJustificativeChamp < Champ after_commit :create_virus_scan + PIECE_JUSTIFICATIVE_FILE_MAX_SIZE = 200.megabytes + + PIECE_JUSTIFICATIVE_FILE_ACCEPTED_FORMATS = [ + "application/pdf", + "application/msword", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/vnd.ms-excel", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "application/vnd.ms-powerpoint", + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + "application/vnd.oasis.opendocument.text", + "application/vnd.oasis.opendocument.presentation", + "application/vnd.oasis.opendocument.spreadsheet", + "image/png", + "image/jpeg" + ] + def mandatory_and_blank? mandatory? && !piece_justificative_file.attached? end + def piece_justificative_file_errors + errors = [] + + if piece_justificative_file.attached? && piece_justificative_file.previous_changes.present? + if piece_justificative_file.blob.byte_size > PIECE_JUSTIFICATIVE_FILE_MAX_SIZE + errors << "Le fichier #{piece_justificative_file.filename.to_s} est trop lourd, il doit faire au plus #{PIECE_JUSTIFICATIVE_FILE_MAX_SIZE.to_s(:human_size, precision: 2)}" + end + + if !piece_justificative_file.blob.content_type.in?(PIECE_JUSTIFICATIVE_FILE_ACCEPTED_FORMATS) + errors << "Le fichier #{piece_justificative_file.filename.to_s} est dans un format que nous n'acceptons pas" + end + + # FIXME: add Clamav check + end + + if errors.present? + piece_justificative_file.purge + end + + errors + end + private def create_virus_scan