Compare commits

..
Author SHA1 Message Date
thomaschen 054e712145 Fix front-end tag cloud search under category filters 2013-11-01 16:17:57 +08:00
Bernie Chiu 05b70c932b Fix tag cloud search under category filters 2013-11-01 14:37:06 +08:00
Bernie Chiu a7a8a504a7 Fix category search to archives frontend search 2013-10-30 16:44:55 +08:00
thomaschen ab9214a4db fix error 2013-10-25 17:11:47 +08:00
Bernie Chiu 232328a7f8 Add oneline and multiline import 2013-10-25 17:03:53 +08:00
thomaschen ebcc13a87a error fix 2013-10-25 16:54:29 +08:00
Bernie Chiu b327a50ee3 Merge 2013-10-25 16:29:17 +08:00
Bernie Chiu a78f9e6ae6 Allow update answers on radio groups 2013-10-25 16:26:06 +08:00
thomaschen a25a82dc89 fix error 2013-10-25 15:35:48 +08:00
thomaschen 3a721c653b merge 2013-10-25 10:28:29 +08:00
Bernie Chiu 9584c01e0d Add import on radiogroups on file change 2013-10-23 17:06:52 +08:00
Bernie Chiu 477eaeaf5c Fix encoding issue and add import on title change 2013-10-23 14:10:04 +08:00
thomaschen a838803b28 remove unuse variable and comment 2013-10-21 17:40:06 +08:00
thomaschen a7113e38a7 import 'check' and 'select' question success 2013-10-21 17:37:34 +08:00
thomaschen 8cdd6f9b52 fix import-csv column error 2013-10-21 17:01:44 +08:00
thomaschen dec6087850 import radio question success 2013-10-21 16:15:06 +08:00
thomaschen ea3edbf7ac can read the spreadsheet each row.(need to think of a method to parse each row to figure) 2013-10-21 14:44:31 +08:00
Bernie Chiu 01ce52060b Fix locale error 2013-10-16 17:25:39 +08:00
Bernie Chiu 1e5fbfed5f Add routing and links for import 2013-10-16 17:03:18 +08:00
12 changed files with 209 additions and 15 deletions

No files matched your search

+3
View File
@@ -29,6 +29,9 @@ gem 'mongoid-tree', :require => 'mongoid/tree'
gem "mongo_session_store-rails3", '3.0.6'
gem 'nokogiri'
# import csv
gem 'roo'
gem 'fb_graph'
gem 'rack-gridfs'
gem 'radius'
@@ -31,20 +31,30 @@ class Panel::Archive::FrontEnd::ArchiveFilesController < OrbitWidgetController
@archive_file_categorys = ArchiveFileCategory.all
# @archive_files = ArchiveFile.where( :is_hidden => false ).desc(:is_top).page(params[:page]).per(@page_num)
# if !params[:category_id].blank? && !params[:tag_id].blank?
# @archive_files = @archive_files.default_sort(params[:sort]).can_display.where(:archive_file_category_id.in => params[:category_id], :tagged_ids.in => params[:tag_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
# @current_category = ArchiveFileCategory.from_id(params[:category_id]) rescue nil
# elsif !params[:category_id].blank?
# @archive_files = ArchiveFile.default_sort(params[:sort]).can_display.where(:archive_file_category_id.in => params[:category_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
# @current_category = ArchiveFileCategory.from_id(params[:category_id]) rescue nil
# elsif !params[:tag_id].blank?
# @archive_files = ArchiveFile.default_sort(params[:sort]).can_display.where(:tagged_ids.in => params[:tag_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
# else
# @archive_files = ArchiveFile.default_sort(params[:sort]).can_display.desc( :is_top ).page( params[:page_main] ).per(@page_num)
# end
if !params[:category_id].blank? && !params[:tag_id].blank?
@archive_files = @archive_files.default_sort(params[:sort]).can_display.where(:archive_file_category_id.in => params[:category_id], :tagged_ids.in => params[:tag_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@current_category = ArchiveFileCategory.from_id(params[:category_id]) rescue nil
elsif !params[:category_id].blank?
@archive_files = ArchiveFile.default_sort(params[:sort]).can_display.where(:archive_file_category_id.in => params[:category_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@current_category = ArchiveFileCategory.from_id(params[:category_id]) rescue nil
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.where(:tagged_ids.in => params[:tag_id]).any_in(:archive_file_category_id => params[:category_id]).merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@current_category = ArchiveFileCategory.any_in(:_id => params[:category_id]).excludes('disable' => true)
elsif !params[:category_id].blank?
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.any_in(:archive_file_category_id => params[:category_id]).merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@current_category = ArchiveFileCategory.any_in(:_id => params[:category_id]).excludes('disable' => true)
elsif !params[:tag_id].blank?
@archive_files = ArchiveFile.default_sort(params[:sort]).can_display.where(:tagged_ids.in => params[:tag_id]).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.any_in(:tagged_ids => params[:tag_id]).merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num)
else
@archive_files = ArchiveFile.default_sort(params[:sort]).can_display.desc( :is_top ).page( params[:page_main] ).per(@page_num)
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top).page( params[:page_main] ).per(@page_num)
end
get_categorys
@@ -28,7 +28,12 @@ class Panel::Archive::Widget::ArchiveFilesController < OrbitWidgetController
date_now = Time.now
if !params[:category_id].blank?
# binding.pry
if !params[:category_id].blank? && !params[:tag_id].blank?
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.where(:tagged_ids.in => params[:tag_id]).any_in(:archive_file_category_id => params[:category_id]).merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@archive_file_categorys = ArchiveFileCategory.any_in(:_id => params[:category_id]).excludes('disable' => true)
elsif !params[:category_id].blank?
@archive_files = ArchiveFile.default_sort(params[:sort]).all.can_display.any_in(:archive_file_category_id => params[:category_id]).merge(ArchiveFileCategory.excludes('disable' => true)).desc( :is_top ).page( params[:page_main] ).per(@page_num)
@archive_file_categorys = ArchiveFileCategory.any_in(:_id => params[:category_id]).excludes('disable' => true)
elsif !params[:tag_id].blank?
+1 -1
View File
@@ -42,10 +42,10 @@ class ArchiveFile
# text :titles do
# title_translations.to_a.collect{|t| t[1]}
# end
# boolean :frontend_search do
# !is_hidden
# end
# end
def self.search( category_id = nil )
+1 -2
View File
@@ -1,8 +1,7 @@
class ArchiveTag < Tag
has_and_belongs_to_many :archive_files
def get_visible_links(sort = :name)
self.archive_files.where(:is_hidden => false).desc(:is_top, sort)
end
@@ -1,4 +1,8 @@
require 'csv'
require 'iconv'
require 'roo'
# encoding: UTF-8
class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
@@ -85,6 +89,145 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController
redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
def set_import
@survey = ::Survey.find(params[:id])
end
def import
@survey = ::Survey.find(params[:id])
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
@file = params[:file]
case File.extname(@file.original_filename)
when ".csv" then @spreadsheet = Roo::CSV.new(@file.path, csv_options: {encoding: Encoding::Big5})
# when ".xls" then Excel.new(file.path, nil, :ignore)
# when ".xlsx" then Excelx.new(file.path, nil, :ignore)
else raise "Unknown file type: #{file.original_filename}"
end
# Modify titles if changed
titles = @spreadsheet.row(1) - [" "]
@survey_questions.each_with_index do |question, index|
question.update_attributes(title: titles[index])
end
@survey_answers.destroy
# Start and end of speadsheet
@end_row = @spreadsheet.count
@max_row_start = 0
@survey_questions.each do |question|
case question.type
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select, ::SurveyQuestion::Check
if question.survey_question_options.count > @max_row_start
@max_row_start = question.survey_question_options.count
end
when ::SurveyQuestion::Radiogroup
if question.survey_question_options.count * question.survey_question_radiogroups.count > @max_row_start
@max_row_start = question.survey_question_options.count * question.survey_question_radiogroups.count
end
end
end
@start_row = @max_row_start + 2
# Modify multiline options if changed
(@start_row..@end_row).each do |row|
@answer_model = @survey.survey_answers.new
@survey_questions.each_with_index do |question, index|
case question.type
when ::SurveyQuestion::Oneline, ::SurveyQuestion::Multiline
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index * 2]
when ::SurveyQuestion::Radio, ::SurveyQuestion::Select
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2]
end
when ::SurveyQuestion::Check
if !@spreadsheet.row(row)[index*2].nil? && @spreadsheet.row(row)[index*2] != " "
@answer_model[question.id.to_s] = @spreadsheet.row(row)[index*2].split("\"").select.each_with_index { |str, i| i.odd? }
end
when ::SurveyQuestion::Radiogroup
radio_groups = []
spreadsheet_radiogroups_lines =
question.survey_question_options.count * question.survey_question_radiogroups.count + 2
# Grab each radiogroups line for update
(2...spreadsheet_radiogroups_lines).each do |line|
radio_groups << @spreadsheet.row(line)[index * 2]
end
# Grab answers info
answers = []
if not @spreadsheet.row(row)[index * 2].blank?
answers << eval(@spreadsheet.row(row)[index * 2])
end
# Save the answers
answers.each do |answer|
options = Hash[question.survey_question_options.collect { |o| [ o.id.to_s, o.name ] }]
# @answer_model = @survey.survey_answers.new
@answer_model[question.id.to_s] = {}
answer.each do |option, value|
@answer_model[question.id.to_s][options.invert[option]] = value
end
# @answer_model.save!
end
# Parse the needed info in the array
radio_titles = []
radio_options = []
radio_groups.each do |group|
option_with_radio = group.split(' - ')
radio_titles << option_with_radio[0]
radio_options << option_with_radio[1]
end
# Update the spreadsheet info to the DB
groups_of_options = []
groups_of_radios = []
radio_titles.each_slice(question.survey_question_radiogroups.count) do |options|
groups_of_options << options
end
radio_options.each_slice(question.survey_question_radiogroups.count) do |options|
groups_of_radios << options
end
# Update option names
question.survey_question_options.each_with_index do |option, index|
groups_of_options[index].each do |modified_option|
if option.name_translations["zh_tw"] != modified_option
option.update_attributes(name: modified_option)
break
end
end
end
# Update radio names
question.survey_question_radiogroups.each_with_index do |option, index|
groups_of_radios.each do |radios|
if radios[index] != option.name_translations["zh_tw"]
option.update_attributes(name: radios[index])
break
end
end
end
end
end
@answer_model.save!
end #end row
redirect_to panel_survey_back_end_surveys_url, :notice => :success
end
def export
@survey = ::Survey.find(params[:id])
@chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data
@@ -44,5 +44,4 @@ class SurveyQuestion
def get_jump_tos
Hash[survey_question_options.select{ |o| !o.jump_to.blank? }.collect{ |o| [o.id.to_s, o.jump_to] }]
end
end
@@ -14,6 +14,7 @@
<li><%= link_to t('survey.jump'), jump_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
<li><%= link_to t('survey.set_answers'), set_answers_panel_survey_back_end_survey_path(survey, :page => params[:page]) %></li>
<li><%= link_to t('survey.export_csv'), export_panel_survey_back_end_survey_path(survey, :format => :csv), :target => '_blank' %></li>
<li><%= link_to t('survey.import_csv'), set_import_panel_survey_back_end_survey_path(survey), :target => '_blank' %></li>
<li><%= link_to t('survey.chart'), result_panel_survey_front_end_survey_path(survey, :force_chart => true, :standalone => true), :target => '_blank' %></li>
<li><%= link_to t(:delete_), panel_survey_back_end_survey_path(survey), :confirm => t('sure?'), :method => :delete, :remote => true %></li>
<% end -%>
@@ -0,0 +1,18 @@
<%= form_tag import_panel_survey_back_end_survey_path(@survey), multipart: true do %>
<table class="table main-list">
<thead>
<tr>
<th class="span2"><%= t('survey.import.title') %></th>
<th class="span2"><%= t('survey.import.description') %></th>
<th class="span2"></th>
</tr>
</thead>
<tbody id="tbody_surveys" class="sort-holder">
<tr>
<td><%= @survey.title %></td>
<td><%= file_field_tag :file %></td>
<td><%= submit_tag t("survey.import_csv"), :class => 'btn' %></td>
</tr>
</tbody>
</table>
<% end %>
+7
View File
@@ -23,6 +23,13 @@ en:
answers_list: Answers List
export_csv: Export CSV
import_csv: Import CSV
import:
title: Imported Survey
description: Choose the Modified Exported File According to this Survey
chart: Chart
set_answers: Set Answers
duplicate_it: Duplicate It
@@ -24,6 +24,13 @@ zh_tw:
answers_list: 結果清單
export_csv: 匯出CSV
import_csv: 匯入CSV
import:
title: 匯入的問卷
description: 選擇根據此問卷所修改的匯出檔案
chart: 結果圖表
set_answers: 設定結果
duplicate_it: 複製問卷
+2
View File
@@ -9,6 +9,8 @@ Rails.application.routes.draw do
end
member do
get 'export'
get 'set_import'
post 'import'
get 'set_answers'
get 'jump'
get 'duplicate_it'