new export csv table
Conflicts: vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
This commit is contained in:
		
							parent
							
								
									15347f25dc
								
							
						
					
					
						commit
						cf0d7cfc64
					
				|  | @ -89,53 +89,66 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController | |||
|     @survey = ::Survey.find(params[:id]) | ||||
|     @chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data | ||||
| 
 | ||||
|     csv = CSV.generate do |csv| | ||||
|       row = [] | ||||
|       @survey_questions.each do |question| | ||||
|         row << question.title | ||||
|         row << ' ' | ||||
|       end | ||||
|       csv << row | ||||
|       csv_stats = [] | ||||
|       @survey_questions.each do |question| | ||||
|         csv_options = [] | ||||
|         csv_counts = [] | ||||
|         case question.type | ||||
|         when ::SurveyQuestion::Radio, ::SurveyQuestion::Select, ::SurveyQuestion::Check | ||||
|           question.survey_question_options.map do |option| | ||||
|             csv_options << option.name | ||||
|             csv_counts << "#{(@chart_data[question.id.to_s][option.name] || 0 rescue 0)}" | ||||
|           end | ||||
|         when ::SurveyQuestion::Radiogroup | ||||
|           question.survey_question_options.map do |option| | ||||
|             question.survey_question_radiogroups.map do |group| | ||||
|               csv_options << "#{option.name} - #{group.name}" | ||||
|               csv_counts << "#{(@chart_data[question.id.to_s][option.name][group.name] || 0 rescue 0)}" | ||||
|             end | ||||
|           end.flatten | ||||
|         else | ||||
|           csv_options << " " | ||||
|           csv_counts << " " | ||||
|         end | ||||
|         csv_stats << csv_options | ||||
|         csv_stats << csv_counts | ||||
|       end | ||||
|       max_length = csv_stats.map(&:length).max | ||||
|       csv_stats.map do |l| | ||||
|         while l.length < max_length | ||||
|           l.push ' ' | ||||
|         end | ||||
|         l | ||||
|       end.transpose.each do |l| | ||||
|         csv << l | ||||
|       end | ||||
|       @survey_answers.each do |answer| | ||||
|         row = [] | ||||
|         @survey_questions.each do |question| | ||||
|           if question.type == ::SurveyQuestion::Radiogroup | ||||
|             options = Hash[question.survey_question_options.collect{|o| [ o.id.to_s, o.name ] }] | ||||
|             row << Hash[answer[question.id.to_s].map {|o, g| [options[o], g]}] | ||||
|           else | ||||
|             row << answer[question.id.to_s] | ||||
|           end | ||||
|           row << ' ' | ||||
|         end | ||||
|         csv << row | ||||
|       end | ||||
| 
 | ||||
|     end | ||||
| 
 | ||||
|     respond_to do |format| | ||||
|       format.csv do | ||||
| 
 | ||||
|         csv = CSV.generate do |csv| | ||||
|           csv << @survey_questions.map(&:title) | ||||
|           csv_stats = [] | ||||
|           csv_stats = @survey_questions.map do |question| | ||||
|             case question.type | ||||
|             when ::SurveyQuestion::Radio, ::SurveyQuestion::Select, ::SurveyQuestion::Check | ||||
|               question.survey_question_options.map do |option| | ||||
|                 "#{option.name} : #{(@chart_data[question.id.to_s][option.name] || 0 rescue 0)}" | ||||
|               end | ||||
|             when ::SurveyQuestion::Radiogroup | ||||
|               question.survey_question_options.map do |option| | ||||
|                 question.survey_question_radiogroups.map do |group| | ||||
|                   "#{option.name} - #{group.name} : #{(@chart_data[question.id.to_s][option.name][group.name] || 0 rescue 0)}" | ||||
|                 end | ||||
|               end.flatten | ||||
|             else | ||||
|               [' '] | ||||
|             end | ||||
|           end | ||||
|           max_length = csv_stats.map(&:length).max | ||||
|           csv_stats.map do |l| | ||||
|             while l.length < max_length | ||||
|               l.push ' ' | ||||
|             end | ||||
|             l | ||||
|           end.transpose.each do |l| | ||||
|             csv << l | ||||
|           end | ||||
|           @survey_answers.each do |answer| | ||||
|             row = [] | ||||
|             @survey_questions.each do |question| | ||||
|               if question.type == ::SurveyQuestion::Radiogroup | ||||
|                 options = Hash[question.survey_question_options.collect{|o| [ o.id.to_s, o.name ] }] | ||||
|                 row << Hash[answer[question.id.to_s].map {|o, g| [options[o], g]}] | ||||
|               else | ||||
|                 row << answer[question.id.to_s] | ||||
|               end | ||||
|             end | ||||
|             csv << row | ||||
|           end | ||||
| 
 | ||||
|         end | ||||
| 
 | ||||
|         render :text => csv | ||||
|         response.headers["Content-Type"] = "text/csv; charset=big5" | ||||
|         render :text => csv.encode('Big5') | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | @ -214,4 +227,4 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController | |||
|     end | ||||
|   end | ||||
|    | ||||
| end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue