Index: app/controllers/issues_controller.rb =================================================================== --- app/controllers/issues_controller.rb (revision 32) +++ app/controllers/issues_controller.rb (working copy) @@ -84,7 +84,8 @@ format.xml { render :layout => false } format.json { render :text => @issues.to_json, :layout => false } format.atom { render_feed(@issues, :title => "#{@project || Setting.app_title}: #{l(:label_issue_plural)}") } - format.csv { send_data(issues_to_csv(@issues, @project), :type => 'text/csv; header=present', :filename => 'export.csv') } +# format.csv { send_data(issues_to_csv(@issues, @project), :type => 'text/csv; header=present', :filename => 'export.csv') } + format.csv { send_data(issues_to_csv_query(@issues, @query, @project), :type => 'text/csv; header=present', :filename => 'export.csv') } format.pdf { send_data(issues_to_pdf(@issues, @project, @query), :type => 'application/pdf', :filename => 'export.pdf') } end else Index: app/helpers/issues_helper.rb =================================================================== --- app/helpers/issues_helper.rb (revision 32) +++ app/helpers/issues_helper.rb (working copy) @@ -175,7 +175,31 @@ return record.name if record end end - + +#экспорт в csv с учетом параметров фильтра + def issues_to_csv_query(issues, query, project = nil) + ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') + decimal_separator = l(:general_csv_decimal_separator) + export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv| + # csv header fields + headers = [ "#"] + query.columns.each do |column| + headers << column.caption.to_s + end + csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end } + # csv lines + issues.each do |issue| + fields = [issue.id.to_s] + query.columns.each do |column| + fields << txt_column_content(column, issue) + end + csv << fields.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end } + end + end + export + end + +#"коробочный" вариант экспорта в CSV def issues_to_csv(issues, project = nil) ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') decimal_separator = l(:general_csv_decimal_separator) Index: app/helpers/queries_helper.rb =================================================================== --- app/helpers/queries_helper.rb (revision 32) +++ app/helpers/queries_helper.rb (working copy) @@ -26,6 +26,37 @@ :default_order => column.default_order) : content_tag('th', column.caption) end + +#определяем значение по названию поля фильтра. Без HTML. + def txt_column_content(column, issue) + value = column.value(issue) + + case value.class.name + when 'String' + value + when 'Time' + format_time(value) + when 'Date' + format_date(value) + when 'Fixnum', 'Float' + value.to_s + when 'User' + value + when 'Project' + value + when 'Version' + value + when 'TrueClass' + l(:general_text_Yes) + when 'FalseClass' + l(:general_text_No) + when 'Issue' + value + else + value + end + end + def column_content(column, issue) value = column.value(issue)