1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
# frozen_string_literal: true
require 'active_record/connection_adapters/abstract_mysql_adapter'
module ActiveRecord
# Undefines private Kernel#open method to allow using `open` scopes in models.
# See Defect #11545 (http://www.redmine.org/issues/11545) for details.
class Base
class << self
undef open
end
end
class Relation ; undef open ; end
module ConnectionAdapters
class MysqlAdapter < AbstractMysqlAdapter
def create_table(table_name, options = {}) #:nodoc:
encoding = @config[:encoding]
if encoding
options = options.reverse_merge(:options => "DEFAULT CHARSET=#{encoding}")
end
super(table_name, options.reverse_merge(:options => "ENGINE=InnoDB"))
end
end
end
end
module ActionView
module Helpers
module DateHelper
# distance_of_time_in_words breaks when difference is greater than 30 years
def distance_of_date_in_words(from_date, to_date = 0, options = {})
from_date = from_date.to_date if from_date.respond_to?(:to_date)
to_date = to_date.to_date if to_date.respond_to?(:to_date)
distance_in_days = (to_date - from_date).abs
I18n.with_options :locale => options[:locale], :scope => :'datetime.distance_in_words' do |locale|
case distance_in_days
when 0..60 then locale.t :x_days, :count => distance_in_days.round
when 61..720 then locale.t :about_x_months, :count => (distance_in_days / 30).round
else locale.t :over_x_years, :count => (distance_in_days / 365).floor
end
end
end
end
end
end
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| html_tag || ''.html_safe }
module ActionView
module Helpers
module FormHelper
alias :date_field_without_max :date_field
def date_field(object_name, method, options = {})
date_field_without_max(object_name, method, options.reverse_merge(max: '9999-12-31'))
end
end
module FormTagHelper
alias :date_field_tag_without_max :date_field_tag
def date_field_tag(name, value = nil, options = {})
date_field_tag_without_max(name, value, options.reverse_merge(max: '9999-12-31'))
end
end
end
end
require 'mail'
module DeliveryMethods
class TmpFile
def initialize(*args); end
def deliver!(mail)
dest_dir = File.join(Rails.root, 'tmp', 'emails')
Dir.mkdir(dest_dir) unless File.directory?(dest_dir)
filename = "#{Time.now.to_i}_#{mail.message_id.gsub(/[<>]/, '')}.eml"
File.binwrite(File.join(dest_dir, filename), mail.encoded)
end
end
end
ActionMailer::Base.add_delivery_method :tmp_file, DeliveryMethods::TmpFile
module ActionController
module MimeResponds
class Collector
def api(&)
any(:xml, :json, &)
end
end
end
end
module ActionController
class Base
# Displays an explicit message instead of a NoMethodError exception
# when trying to start Redmine with an old session_store.rb
# TODO: remove it in a later version
def self.session=(*args)
$stderr.puts "Please remove config/initializers/session_store.rb and run `rake generate_secret_token`.\n" +
"Setting the session secret with ActionController.session= is no longer supported."
exit 1
end
end
end
module ActionView
LookupContext.prepend(Module.new do
def formats=(values)
if Array(values).intersect?([:xml, :json])
values << :api
end
super
end
end)
end
module ActionController
Base.prepend(Module.new do
def rendered_format
if lookup_context.formats.first == :api
return request.format
end
super
end
end)
end
Mime::SET << 'api'
module Propshaft
Assembly.prepend(Module.new do
def initialize(config)
super
if Rails.application.config.assets.redmine_detect_update && (!config.manifest_path.exist? || manifest_outdated?)
processor.process
end
end
def manifest_outdated?
!!load_path.asset_files.detect{|f| f.mtime > config.manifest_path.mtime}
end
def load_path
@load_path ||= Redmine::AssetLoadPath.new(config, compilers)
end
end)
Helper.prepend(Module.new do
def compute_asset_path(path, options = {})
super
rescue MissingAssetError => e
File.join Rails.application.assets.resolver.prefix, path
end
end)
end
|