Redmine 4.1.1
This commit is contained in:
parent
33e7b881a5
commit
3d976f1b3b
1593 changed files with 36180 additions and 19489 deletions
|
@ -1,5 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Redmine - project management software
|
||||
# Copyright (C) 2006-2017 Jean-Philippe Lang
|
||||
# Copyright (C) 2006-2019 Jean-Philippe Lang
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
|
@ -23,12 +25,18 @@ module Redmine
|
|||
extend Redmine::Utils::Shell
|
||||
|
||||
CONVERT_BIN = (Redmine::Configuration['imagemagick_convert_command'] || 'convert').freeze
|
||||
ALLOWED_TYPES = %w(image/bmp image/gif image/jpeg image/png)
|
||||
ALLOWED_TYPES = %w(image/bmp image/gif image/jpeg image/png application/pdf)
|
||||
|
||||
# Generates a thumbnail for the source image to target
|
||||
def self.generate(source, target, size)
|
||||
def self.generate(source, target, size, is_pdf = false)
|
||||
return nil unless convert_available?
|
||||
return nil if is_pdf && !gs_available?
|
||||
unless File.exists?(target)
|
||||
mime_type = File.open(source) {|f| MimeMagic.by_magic(f).try(:type) }
|
||||
return nil if mime_type.nil?
|
||||
return nil if !ALLOWED_TYPES.include? mime_type
|
||||
return nil if is_pdf && mime_type != "application/pdf"
|
||||
|
||||
# Make sure we only invoke Imagemagick if the file type is allowed
|
||||
unless File.open(source) {|f| ALLOWED_TYPES.include? MimeMagic.by_magic(f).try(:type) }
|
||||
return nil
|
||||
|
@ -38,7 +46,12 @@ module Redmine
|
|||
FileUtils.mkdir_p directory
|
||||
end
|
||||
size_option = "#{size}x#{size}>"
|
||||
cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -thumbnail #{shell_quote size_option} #{shell_quote target}"
|
||||
|
||||
if is_pdf
|
||||
cmd = "#{shell_quote CONVERT_BIN} #{shell_quote "#{source}[0]"} -thumbnail #{shell_quote size_option} #{shell_quote "png:#{target}"}"
|
||||
else
|
||||
cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -auto-orient -thumbnail #{shell_quote size_option} #{shell_quote target}"
|
||||
end
|
||||
unless system(cmd)
|
||||
logger.error("Creating thumbnail failed (#{$?}):\nCommand: #{cmd}")
|
||||
return nil
|
||||
|
@ -59,6 +72,22 @@ module Redmine
|
|||
@convert_available
|
||||
end
|
||||
|
||||
def self.gs_available?
|
||||
return @gs_available if defined?(@gs_available)
|
||||
|
||||
if Redmine::Platform.mswin?
|
||||
@gs_available = false
|
||||
else
|
||||
begin
|
||||
`gs -version`
|
||||
@gs_available = $?.success?
|
||||
rescue
|
||||
@gs_available = false
|
||||
end
|
||||
end
|
||||
@gs_available
|
||||
end
|
||||
|
||||
def self.logger
|
||||
Rails.logger
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue