]> source.dussan.org Git - redmine.git/commitdiff
Adds a dialog box for CSV export options (#4742).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Nov 2011 13:23:20 +0000 (13:23 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 20 Nov 2011 13:23:20 +0000 (13:23 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7874 e93f8b46-1217-0410-a6f0-8f06a7374b81

50 files changed:
app/controllers/issues_controller.rb
app/helpers/issues_helper.rb
app/views/issues/index.html.erb
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/es.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hu.yml
config/locales/id.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mn.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sr-YU.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
public/javascripts/application.js
public/stylesheets/application.css
test/functional/issues_controller_test.rb

index d782a796571fdc5a01b731d3990faba4a95bd472..7978bc001c0ed595c704bdd7a07322aa07b0b483 100644 (file)
@@ -94,7 +94,7 @@ class IssuesController < ApplicationController
           Issue.load_relations(@issues) if include_in_api_response?('relations')
         }
         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, @query, params), :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 9ef9e0458260ede514d3fbadaa33d84f2b6e9572..ff97aed5bbe0dcf3e05101c6c3798287ac3b4e61 100644 (file)
@@ -263,62 +263,39 @@ module IssuesHelper
     end
   end
 
-  def issues_to_csv(issues, project = nil)
+  def issues_to_csv(issues, project, query, options={})
+    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
     decimal_separator = l(:general_csv_decimal_separator)
+    encoding = l(:general_csv_encoding)
+    columns = (options[:columns] == 'all' ? query.available_columns : query.columns)
+
     export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
       # csv header fields
-      headers = [ "#",
-                  l(:field_status),
-                  l(:field_project),
-                  l(:field_tracker),
-                  l(:field_priority),
-                  l(:field_subject),
-                  l(:field_assigned_to),
-                  l(:field_category),
-                  l(:field_fixed_version),
-                  l(:field_author),
-                  l(:field_start_date),
-                  l(:field_due_date),
-                  l(:field_done_ratio),
-                  l(:field_estimated_hours),
-                  l(:field_parent_issue),
-                  l(:field_created_on),
-                  l(:field_updated_on)
-                  ]
-      # Export project custom fields if project is given
-      # otherwise export custom fields marked as "For all projects"
-      custom_fields = project.nil? ? IssueCustomField.for_all : project.all_issue_custom_fields
-      custom_fields.each {|f| headers << f.name}
-      # Description in the last column
-      headers << l(:field_description)
-      csv << headers.collect {|c| Redmine::CodesetUtil.from_utf8(
-                                    c.to_s,
-                                    l(:general_csv_encoding) ) }
+      csv << [ "#" ] + columns.collect {|c| Redmine::CodesetUtil.from_utf8(c.caption.to_s, encoding) } +
+        (options[:description] ? [Redmine::CodesetUtil.from_utf8(l(:field_description), encoding)] : [])
+
       # csv lines
       issues.each do |issue|
-        fields = [issue.id,
-                  issue.status.name,
-                  issue.project.name,
-                  issue.tracker.name,
-                  issue.priority.name,
-                  issue.subject,
-                  issue.assigned_to,
-                  issue.category,
-                  issue.fixed_version,
-                  issue.author.name,
-                  format_date(issue.start_date),
-                  format_date(issue.due_date),
-                  issue.done_ratio,
-                  issue.estimated_hours.to_s.gsub('.', decimal_separator),
-                  issue.parent_id,
-                  format_time(issue.created_on),
-                  format_time(issue.updated_on)
-                  ]
-        custom_fields.each {|f| fields << show_value(issue.custom_value_for(f)) }
-        fields << issue.description
-        csv << fields.collect {|c| Redmine::CodesetUtil.from_utf8(
-                                    c.to_s,
-                                    l(:general_csv_encoding) ) }
+        col_values = columns.collect do |column|
+          s = if column.is_a?(QueryCustomFieldColumn)
+            cv = issue.custom_values.detect {|v| v.custom_field_id == column.custom_field.id}
+            show_value(cv)
+          else
+            value = issue.send(column.name)
+            if value.is_a?(Date)
+              format_date(value)
+            elsif value.is_a?(Time)
+              format_time(value)
+            elsif value.is_a?(Float)
+              value.to_s.gsub('.', decimal_separator)
+            else
+              value
+            end
+          end
+          s.to_s
+        end
+        csv << [ issue.id.to_s ] + col_values.collect {|c| Redmine::CodesetUtil.from_utf8(c.to_s, encoding) } +
+          (options[:description] ? [Redmine::CodesetUtil.from_utf8(issue.description, encoding)] : [])
       end
     end
     export
index a5e657ec116811eb816965b82c927e58863976f4..22791a9ae019f2f101264950c04693afce5896c2 100644 (file)
 
 <% other_formats_links do |f| %>
   <%= f.link_to 'Atom', :url => params.merge(:key => User.current.rss_key) %>
-  <%= f.link_to 'CSV', :url => params %>
+  <%= f.link_to 'CSV', :url => params, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
   <%= f.link_to 'PDF', :url => params %>
 <% end %>
 
+<div id="csv-export-options" style="display:none;">
+  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
+  <% form_tag(params.merge({:format => 'csv',:page=>nil}), :method => :get, :id => 'csv-export-form') do %>
+  <p>
+    <label><%= radio_button_tag 'columns', '', true %> <%= l(:description_selected_columns) %></label><br />
+    <label><%= radio_button_tag 'columns', 'all' %> <%= l(:description_all_columns) %></label>
+  </p>
+  <p>
+    <label><%= check_box_tag 'description', '1' %> <%= l(:field_description) %></label>
+  </p>
+  <p style="text-align:right; margin-bottom:0">
+    <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);" %>
+    <%= submit_tag l(:button_cancel), :name => nil, :onclick => "hideModal(this);", :type => 'button' %>
+  </p>
+  <% end %>
+</div>
+
 <% end %>
 <%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %>
 
index 3c234a37658ab15f80fa9ce384ece4930245cd5a..66694871405db0d708792e50bb0572ea52085451 100644 (file)
@@ -1000,3 +1000,6 @@ bg:
   description_date_from: Въведете начална дата
   description_date_to: Въведете крайна дата
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 07b43487f239b27eef2300689927a1b638a5088a..1087e1a26011efb5f7719b391e5127eab0573b05 100644 (file)
@@ -1016,3 +1016,6 @@ bs:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 110f05148a0dc4ad5c9b4972876dc819d0377e3c..3737830ff59959aa5940c1b939c05812dd8f9da9 100644 (file)
@@ -1005,3 +1005,6 @@ ca:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index c4c2ef7b10250a2303bb19a1b6dad7c614bcbd03..6c8dcc924a50de7d3cdfd1c8bf0d6317ab5465a1 100644 (file)
@@ -1006,3 +1006,6 @@ cs:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 6dead5564119cd497e36eb4dfcf29c488fbab35d..de532a420d0d6171ba26d1638c64b4f3263494a0 100644 (file)
@@ -1019,3 +1019,6 @@ da:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index daf694cfa29865b9d1679e052922745a871fa2f7..8dcbb686a6acce628e7dbf75981a32cc590a51bf 100644 (file)
@@ -1023,3 +1023,6 @@ de:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index fdb1cb7113c8c594c554acc1f81c06873a6bb35c..372830b8e3ddddf37fd714125011ce9ecaa83bf7 100644 (file)
@@ -1002,3 +1002,6 @@ el:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index be143756ea871438b3c409a4f7cb4b571d7442c5..7c5844dc44d28bf39aba18ae85a5f647fe411220 100644 (file)
@@ -1005,3 +1005,6 @@ en-GB:
   label_child_revision: Child
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 16bb6a9cd4498a0a311238ba364ff47c7816c9b8..a4f36684814d70b5c6bcd06d583ef6ea23d1f6ab 100644 (file)
@@ -827,6 +827,7 @@ en:
   label_git_report_last_commit: Report last commit for files and directories
   label_parent_revision: Parent
   label_child_revision: Child
+  label_export_options: %{export_format} export options
 
   button_login: Login
   button_submit: Submit
@@ -875,6 +876,7 @@ en:
   button_duplicate: Duplicate
   button_show: Show
   button_edit_section: Edit this section
+  button_export: Export
 
   status_active: active
   status_registered: registered
@@ -994,6 +996,7 @@ en:
   description_user_mail_notification: Mail notification settings
   description_available_columns: Available Columns
   description_selected_columns: Selected Columns
+  description_all_columns: All Columns
   description_issue_category_reassign: Choose issue category
   description_wiki_subpages_reassign: Choose new parent page
   description_date_range_list: Choose range from list
index 45ee938b1f57b0149cbdfa59825a8a3c01d09be8..6d0d19c4b6c8f6349e47695d0632b2127d2c14fd 100644 (file)
@@ -1039,3 +1039,6 @@ es:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 78295da47d1f24fd4f4a537760c6d4b3ade328e7..01037927525f15edfda2e749689fa26cbe0cdac1 100644 (file)
@@ -1006,3 +1006,6 @@ eu:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index a0c1c7b3af07e4a1cd16ada6005725231c27cd87..db4961b728fef6123280bd2b523c4706bb44f7bc 100644 (file)
@@ -1005,3 +1005,6 @@ fa:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 36da700a790fd3a010544091bf9bf0d9dcf6e333..970c99f6f9f3b1735679dea3674524f69d8d1d9d 100644 (file)
@@ -1023,3 +1023,6 @@ fi:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 3ba06c4518510abb40d20e38669ddd565068d0b5..8412a5e9d66a8ce9217fd631ce105332e4ecd3eb 100644 (file)
@@ -803,6 +803,7 @@ fr:
   label_issues_visibility_all: Toutes les demandes
   label_issues_visibility_public: Toutes les demandes non privées
   label_issues_visibility_own: Demandes créées par ou assignées à l'utilisateur
+  label_export_options: Options d'exportation %{export_format}
 
   button_login: Connexion
   button_submit: Soumettre
@@ -850,6 +851,7 @@ fr:
   button_duplicate: Dupliquer
   button_show: Afficher
   button_edit_section: Modifier cette section
+  button_export: Exporter
 
   status_active: actif
   status_registered: enregistré
@@ -1002,7 +1004,8 @@ fr:
   description_user_mail_notification: Mail notification settings
   description_date_from: Enter start date
   description_message_content: Message content
-  description_available_columns: Available Columns
+  description_available_columns: Colonnes disponibles
+  description_all_columns: Toutes les colonnes
   description_date_range_interval: Choose range by selecting start and end date
   description_issue_category_reassign: Choose issue category
   description_search: Searchfield
@@ -1012,7 +1015,7 @@ fr:
   description_date_to: Enter end date
   description_query_sort_criteria_attribute: Sort attribute
   description_wiki_subpages_reassign: Choose new parent page
-  description_selected_columns: Selected Columns
+  description_selected_columns: Colonnes sélectionnées
   label_parent_revision: Parent
   label_child_revision: Child
   error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
index 4d4f58f61988c2a1049d6557ffe76675d4b257e1..4f1347563c312ad3db91bed7f4ff6175ac6e2814 100644 (file)
@@ -1014,3 +1014,6 @@ gl:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index a7b7ae5b26bd04427d83ef9fa8a5adfb9698f0e0..22c1c20e996b0eea0d45ba2cd1f6a42da2cba3d7 100644 (file)
@@ -1007,3 +1007,6 @@ he:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 3a1fc39637d0c436917ebe9ea62e165476fbea88..a90cd6b4dde1d64b71a8e1ba6cc456234bc85958 100644 (file)
@@ -1009,3 +1009,6 @@ hr:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 79030c3f22c7e3f6de12e15406d860eeac51d814..ec80dac6be81a9caa72c0891c97668ec730de6ff 100644 (file)
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 70899ffc4a37d3087cd235564679074111bfd006..3895f93183812f2d8c1be4710cd7aa256a4a99e5 100644 (file)
@@ -1010,3 +1010,6 @@ id:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 5b89ecf1bc3e4c54d3800b0730867b36036dd533..61d6ba4c65f4ca9150273271b0548b66b737c1c5 100644 (file)
@@ -1003,3 +1003,6 @@ it:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 3b106bd04d7b25f3c79717457c964be55be63b68..55958d26c05ae616bbe6c2d183a6f190cc715033 100644 (file)
@@ -1032,3 +1032,6 @@ ja:
   error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 1d909da25d6c985caead2f321097a9a1b426e53b..7ed420999857a4d406fd9e893e76fb72ecbb0c14 100644 (file)
@@ -1054,3 +1054,6 @@ ko:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 55654da51e32f9f6025bd606d0d5e2f06106c15a..7cd3879a2b2c1d31a3206acce1a2450a48d582c3 100644 (file)
@@ -1062,3 +1062,6 @@ lt:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index ed618678090bf70829d07717b1334ed33e71760c..5be9a3f199c9e6756618255b1fc3251020f7c599 100644 (file)
@@ -997,3 +997,6 @@ lv:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index fc0fb9d1c6a018bcc2a5e784306bf3556a0080b9..b3ff76b9ae04d80159a7645198d1345039887976 100644 (file)
@@ -1002,3 +1002,6 @@ mk:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index da04b9f292627248861bfa829c97440b3989063b..16128e4aea85dac50d27709a67844024f1a7c7cd 100644 (file)
@@ -1003,3 +1003,6 @@ mn:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index f610520f47b87ecff3702c488bcee6b7d784408e..f6bb27d1613b7e46e52ee8a2942a95aca9eb0921 100644 (file)
@@ -984,3 +984,6 @@ nl:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 33572781f30a99feffcca0da08260b00e8e0cd62..69bf7490bcab5e41b8ab872c2d9b1191484aa4e0 100644 (file)
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 41abb1ff53983a30a2e612837ef0d25dce4c5f97..4e53459adc60edf126c673e9fa8a2cb8f3991920 100644 (file)
@@ -1019,3 +1019,6 @@ pl:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 0baa3b092f6311b5e8294e0301c00b4806bf014b..a5b26fe02b7b8c3eef81879c122fc303430f7e2f 100644 (file)
@@ -1023,3 +1023,6 @@ pt-BR:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index a951e719f2213d0c355064c8b5b0c82ea5422c5d..2ff204dc6479c772f53c53678d5f228859f60704 100644 (file)
@@ -1007,3 +1007,6 @@ pt:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 19631bd655656801dec3c8e8fbaf31c33dfc7b64..c430fe3a885a72c4b352e53df6d07746f835ee42 100644 (file)
@@ -995,3 +995,6 @@ ro:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 66976fdcacf99d55ca71e4f43b5e2b525b0790bd..0a15b80e685bcab083e663b6e94dd709726b52ff 100644 (file)
@@ -1115,3 +1115,6 @@ ru:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index ac69b9cd70505589028a2d2b11d8cfb49d8b3bff..628812d12c6d24a26d0618c63838a76f7d898fae 100644 (file)
@@ -997,3 +997,6 @@ sk:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 5949313b206d26d84d9b67302622f79bbc982083..0b4f060cba37e50613b4eaa945f5e7a307e33f44 100644 (file)
@@ -1002,3 +1002,6 @@ sl:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 2545636e2b48fffadd4d19b3d371efeb237d7362..662ef51ebacc15b8ba6d18047f4d8f331ac43f86 100644 (file)
@@ -1002,3 +1002,6 @@ sr-YU:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index c9d7689a7c31e6d11f16d7a5ffa686d136ff6bcf..390f24e2e746b7d259e0843a111c5a2959e8d609 100644 (file)
@@ -1003,3 +1003,6 @@ sr:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index ae0fb5ba93f9a35c448aeccf2877fc7ad27a642a..841da7b15c992f57d6147ee81205d72e35c9e0f1 100644 (file)
@@ -1043,3 +1043,6 @@ sv:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 9e0a24be8e0449213082a56696102693ee2b9b19..c625e68bd3897d352cb9cd6b6a5089392463d560 100644 (file)
@@ -999,3 +999,6 @@ th:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index e494b86f1a23c553ab90e37f1457f9a7ec3bb7ba..1bde02b64e49df6b275d14dc5b9e885eba45640e 100644 (file)
@@ -1021,3 +1021,6 @@ tr:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 264e757249e339db01d390d5ebfb0ad03cbe309d..3f2643485e22791c8867d78eec791ff13530a1ba 100644 (file)
@@ -998,3 +998,6 @@ uk:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 9b19d392c837f7cda4ec1ba8ecbf90349ffcbd27..d766a69e632337064e13710f3d29b53810332ce2 100644 (file)
@@ -1053,3 +1053,6 @@ vi:
   setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 7fc8c6e6268789f172efffc8acd4b5a59d73500e..e0e612c6c94b4adf07e20a99844788e7a25d89c1 100644 (file)
   description_date_to: 輸入結束日期
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 161d897f38763bcb9ac3546cce02eef82382c04f..410dc84a96383cd5f33f292277eb88577aa2b7d6 100644 (file)
@@ -1004,3 +1004,6 @@ zh:
   setting_default_issue_start_date_to_creation_date: 使用当前日期作为新问题的开始日期
   button_edit_section: Edit this section
   setting_repositories_encodings: Attachments and repositories encodings
+  description_all_columns: All Columns
+  button_export: Export
+  label_export_options: "%{export_format} export options"
index 19aef77b873b8ecac36dfed8154768a68c695a8d..230e40b5db0bb9aa890d6fd13add907ddc09365a 100644 (file)
@@ -186,6 +186,39 @@ function promptToRemote(text, param, url) {
     }
 }
 
+function showModal(id, width) {
+  el = $(id);
+       if (el == undefined || el.visible()) {return;}
+  var h = $$('body')[0].getHeight();
+  var d = document.createElement("div");
+  d.id = 'modalbg';
+  $('main').appendChild(d);
+  $('modalbg').setStyle({ width: '100%', height: h + 'px' });
+  $('modalbg').show();
+
+  var pageWidth = document.viewport.getWidth();
+       el.setStyle({'width': width});
+       el.setStyle({'left': (((pageWidth - el.getWidth())/2  *100) / pageWidth) + '%'});
+  el.addClassName('modal');
+       el.show();
+
+  var submit = el.down("input[type=submit]");
+       if (submit) {
+       submit.focus();
+  }
+}
+
+function hideModal(el) {
+  var modal = Element.up(el, 'div.modal');
+       if (modal) {
+               modal.hide();
+       }
+       var bg = $('modalbg');
+       if (bg) {
+       bg.remove();
+  }
+}
+
 function collapseScmEntry(id) {
     var els = document.getElementsByClassName(id, 'browser');
        for (var i = 0; i < els.length; i++) {
index 4f708c9078875a04be70b36f3f40265e0a1cc023..715cfdd788b19a89b5d91eaf0b9b0b144e9d7106 100644 (file)
@@ -91,6 +91,12 @@ html>body #content { min-height: 600px; }
 #login-form label {font-weight: bold;}
 #login-form input#username, #login-form input#password { width: 300px; }
 
+#modalbg {position:absolute; top:0; left:0; width:100%; height:100%; background:#ccc; z-index:49; opacity:0.5;}
+html>body #modalbg {position:fixed;}
+div.modal { border-radius:5px; position:absolute; top:25%; background:#fff; border:2px solid #759FCF; z-index:50; padding:0px; padding:8px;}
+div.modal h3.title {background:#759FCF; color:#fff; border:0; padding-left:8px; margin:-8px; margin-bottom: 1em; border-top-left-radius:2px;border-top-right-radius:2px;}
+html>body div.modal {position:fixed;}
+
 input#openid_url { background: url(../images/openid-bg.gif) no-repeat; background-color: #fff; background-position: 0 50%; padding-left: 18px; }
 
 .clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
index b350512afda07dca48d5e9639b0f3dd948a3a91d..017f474519908d490f9475aadc6811bc94179130 100644 (file)
@@ -281,21 +281,43 @@ class IssuesControllerTest < ActionController::TestCase
     get :index, :sort => 'tracker'
   end
 
-  def test_index_csv_with_project
-    Setting.default_language = 'en'
-
+  def test_index_csv
     get :index, :format => 'csv'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'text/csv', @response.content_type
     assert @response.body.starts_with?("#,")
+    lines = @response.body.chomp.split("\n")
+    assert_equal assigns(:query).columns.size + 1, lines[0].split(',').size
+  end
 
+  def test_index_csv_with_project
     get :index, :project_id => 1, :format => 'csv'
     assert_response :success
     assert_not_nil assigns(:issues)
     assert_equal 'text/csv', @response.content_type
   end
 
+  def test_index_csv_with_description
+    get :index, :format => 'csv', :description => '1'
+    assert_response :success
+    assert_not_nil assigns(:issues)
+    assert_equal 'text/csv', @response.content_type
+    assert @response.body.starts_with?("#,")
+    lines = @response.body.chomp.split("\n")
+    assert_equal assigns(:query).columns.size + 2, lines[0].split(',').size
+  end
+
+  def test_index_csv_with_all_columns
+    get :index, :format => 'csv', :columns => 'all'
+    assert_response :success
+    assert_not_nil assigns(:issues)
+    assert_equal 'text/csv', @response.content_type
+    assert @response.body.starts_with?("#,")
+    lines = @response.body.chomp.split("\n")
+    assert_equal assigns(:query).available_columns.size + 1, lines[0].split(',').size
+  end
+
   def test_index_csv_big_5
     with_settings :default_language => "zh-TW" do
       str_utf8  = "\xe4\xb8\x80\xe6\x9c\x88"
@@ -314,7 +336,7 @@ class IssuesControllerTest < ActionController::TestCase
                   :op => '=', :values => [str_utf8],
                   :format => 'csv'
       assert_equal 'text/csv', @response.content_type
-      lines = @response.body.chomp.split("\n")    
+      lines = @response.body.chomp.split("\n")
       s1 = "\xaa\xac\xbaA"
       if str_utf8.respond_to?(:force_encoding)
         s1.force_encoding('Big5')
@@ -338,17 +360,19 @@ class IssuesControllerTest < ActionController::TestCase
       get :index, :project_id => 1, 
                   :f => ['subject'], 
                   :op => '=', :values => [str_utf8],
-                  :format => 'csv'
+                  :c => ['status', 'subject'],
+                  :format => 'csv',
+                  :set_filter => 1
       assert_equal 'text/csv', @response.content_type
-      lines = @response.body.chomp.split("\n")    
-      s1 = "\xaa\xac\xbaA"
+      lines = @response.body.chomp.split("\n")
+      s1 = "\xaa\xac\xbaA" # status
       if str_utf8.respond_to?(:force_encoding)
         s1.force_encoding('Big5')
       end
       assert lines[0].include?(s1)
-      s2 = lines[1].split(",")[5]
+      s2 = lines[1].split(",")[2]
       if s1.respond_to?(:force_encoding)
-        s3 = "\xa5H?"
+        s3 = "\xa5H?" # subject
         s3.force_encoding('Big5')
         assert_equal s3, s2
       elsif RUBY_PLATFORM == 'java'