# farend_ie_ja_filename_fix
#
# Copyright (C) 2010 FAR END Technologies Corporation.
# This software is licensed under the MIT License.
#
# [説明]
#
# 日本語環境のInternet Explorerで日本語ファイル名のファイルをダウンロード
# する際にファイル名が文字化けしたり切れたりする問題を回避します。
# 
# 具体的には、日本語環境で実行されていると思われる(Accept-Languageの先頭が
# jaである)Internet Explorerに対してファイルのダウンロードを行わせる際は、
# ファイル名のエンコーディングをutf-8からShift_JIS(より正確にはCP932)に変換
# します。
# 
# Redmine 0.9向けに開発しましたが、パッチの対象はRuby on Rails本体ですので、
# Ruby on Rails 2.3.xを使用したアプリケーション全般で使用可能です。
#
# [インストール]
#
# $RAILS_ROOT/config/initializer/以下にこのファイルを置いてアアプリケーション
# を再起動してください。
#
require 'action_controller'
require 'iconv'

module ActionController
  module Streaming

    private
    # Internet Explorerでのダウンロードファイル名文字化け対策
    # [参考] http://support.microsoft.com/kb/436616/ja
    #
    def send_file_headers_with_ie_patch!(options)
      if request.env['HTTP_USER_AGENT'] =~ /MSIE \d/ && request.env['HTTP_ACCEPT_LANGUAGE'] =~ /^ja/
        begin
           options[:filename] =
             Iconv.iconv('cp932', 'utf-8', URI.decode(options[:filename]))
        rescue
          ; # 変換に失敗した場合はutf-8のまま送る
        end
      end
      send_file_headers_without_ie_patch!(options)
    end

    alias_method_chain :send_file_headers!, :ie_patch

  end
end
