diff --git a/app/controllers/admin/cancerpredicts_controller.rb b/app/controllers/admin/cancerpredicts_controller.rb
index cf1213b..ab697e9 100644
--- a/app/controllers/admin/cancerpredicts_controller.rb
+++ b/app/controllers/admin/cancerpredicts_controller.rb
@@ -1,8 +1,8 @@
# encoding: utf-8
class Admin::CancerpredictsController < OrbitAdminController
- require 'spreadsheet'
- require 'rubyXL'
- require 'fileutils'
+ require "spreadsheet"
+ require "rubyXL"
+ require "fileutils"
require "axlsx"
require "csv"
#include Admin::CancerpredictsHelper
@@ -14,708 +14,717 @@ class Admin::CancerpredictsController < OrbitAdminController
super
@app_title = "cancerpredict"
end
+
def yaml_load(v)
- YAML.load(v)
+ YAML.load(v)
end
+
def index
- @tags = @module_app.tags
+ @tags = @module_app.tags
@categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories, @tags)
@table_fields = [:status, :category, :title, :start_date, :end_date, :last_modified]
- @head_images_id = @form_to_show.head_images_id
- @title_images_id = @form_to_show.title_images_id
- @head_images = []
- @title_images = []
- @head_images_id.each{|image_id| @head_images.push Headimages.find_by(:id=>image_id.to_s)} rescue nil
- @title_images_id.each{|image_id| @title_images.push Headimages.find_by(:id=>image_id.to_s)} rescue nil
- @head_new_image = Headimages.new(:cancerpredictfields_id => @form_to_show.id)
+ @head_images_id = @form_to_show.head_images_id
+ @title_images_id = @form_to_show.title_images_id
+ @head_images = []
+ @title_images = []
+ @head_images_id.each { |image_id| @head_images.push Headimages.find_by(:id => image_id.to_s) } rescue nil
+ @title_images_id.each { |image_id| @title_images.push Headimages.find_by(:id => image_id.to_s) } rescue nil
+ @head_new_image = Headimages.new(:cancerpredictfields_id => @form_to_show.id)
end
- def edit
- other_in_use_locales = Site.first.in_use_locales.map{|l| l.to_s}
- other_in_use_locales.delete(params[:locale])
- if !(params["cancerpredictfields"].nil?)
- if !(params["cancerpredictfields"]["form_show"].nil?)
- params["cancerpredictfields"]["form_show"].each do |num,property|
- property.each do |key,value|
- if key.include?("_file") && (!value[:temp_file].blank? rescue false)
- if value[:id].nil?
- mapping_file = CancerPredictMappingFile.create(value)
- else
- mapping_file = CancerPredictMappingFile.find(value[:id])
- mapping_file.temp_file = value[:temp_file]
- mapping_file.save
- end
- @form_to_show.form_show[num.to_s][key.to_s] = mapping_file.id
- elsif key.include?("_file")
- if value[:_destroy] == "1"
- mapping_file = CancerPredictMappingFile.find(value[:id])
- mapping_file.destroy
- @form_to_show.form_show[num.to_s][key.to_s] = ""
- end
- end
- next if key.include?("_file")
- if (key != "old_num")
- if key != params[:locale]
- @form_to_show.form_show[num.to_s] = {} if @form_to_show.form_show[num.to_s].nil?
- type = Cancerpredictfields::FIELDINFO[key.to_s]
- if type && Cancerpredictfields::Field_relations[type]
- type = Cancerpredictfields::Field_relations[type]
- end
- type = type.constantize rescue String
- if type != Array
- if type == Fixnum
- @form_to_show.form_show[num.to_s][key.to_s] = value.to_i rescue 0
- elsif type == Float
- @form_to_show.form_show[num.to_s][key.to_s] = value.to_f rescue 0.0
- else
- @form_to_show.form_show[num.to_s][key.to_s] = value
- end
- else
- if value.length > 2
- @form_to_show.form_show[num.to_s][key.to_s] = yaml_load(value)
- else
- @form_to_show.form_show[num.to_s][key.to_s] = []
- end
- end
- else
- value.each do |sub_property,sub_value|
- type = Cancerpredictfields::FIELDINFO[sub_property.to_s]
- if type && Cancerpredictfields::Field_relations[type]
- type = Cancerpredictfields::Field_relations[type]
- end
- type = type.constantize rescue String
- @form_to_show.form_show[ num.to_s ][ sub_property ] = {} if @form_to_show.form_show[num.to_s][ sub_property ].nil?
- if type != Array
- if type == Fixnum
- @form_to_show.form_show[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value.to_i rescue 0
- elsif type == Float
- @form_to_show.form_show[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value.to_f rescue 0.0
- else
- @form_to_show.form_show[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value
- end
- else
- if sub_value.length > 2
- @form_to_show.form_show[ num.to_s ][ sub_property ][params[:locale].to_s] = yaml_load(sub_value)
- else
- @form_to_show.form_show[ num.to_s ][ sub_property ][params[:locale].to_s] = []
- end
- end
- if(property["old_num"].present? && property["old_num"] != num.to_s)
- other_in_use_locales.each do |locale|
- @form_to_show.form_show[ num.to_s ][ sub_property ][locale] = @form_to_show.form_show_was[ property["old_num"] ][ sub_property ][locale]
- end
- end
- end
- end
- end
- end
- end
- org_nums = @form_to_show.form_show_was.keys
- remain_org_nums = params["cancerpredictfields"]["form_show"].values.map{|property| property["old_num"]}.select{|n| n.present?}
- delete_nums = org_nums - remain_org_nums
- if !delete_nums.blank?
- delete_nums.each do |delete_num|
- @form_to_show.form_show.delete(delete_num)
- end
- end
- @form_to_show.form_show = @form_to_show.form_show.values.map.with_index{|v,i| [i.to_s, v]}.to_h
- else
- @form_to_show.form_show = {}
- end
- if !params["cancerpredictfields"]["form_show_in_result"].nil?
- params["cancerpredictfields"]["form_show_in_result"].each do |num,property|
- property.each do |key,value|
- if key.include?("_file") && (!value[:temp_file].blank? rescue false)
- if value[:id].nil?
- mapping_file = CancerPredictMappingFile.create(value)
- else
- mapping_file = CancerPredictMappingFile.find(value[:id])
- mapping_file.temp_file = value[:temp_file]
- mapping_file.save
- end
- @form_to_show.form_show[num.to_s][key.to_s] = mapping_file.id
- elsif key.include?("_file")
- if value[:_destroy] == "1"
- mapping_file = CancerPredictMappingFile.find(value[:id])
- mapping_file.destroy
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = ""
- end
- end
- next if key.include?("_file")
- if (key != "old_num")
- if key != params[:locale]
- @form_to_show.form_show_in_result[num.to_s] = {} if @form_to_show.form_show_in_result[num.to_s].nil?
- type = Cancerpredictfields::FIELDINFO[key.to_s]
- if type && Cancerpredictfields::Field_relations[type]
- type = Cancerpredictfields::Field_relations[type]
- end
- type = type.constantize rescue String
- if type != Array
- if type == Fixnum
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = value.to_i rescue 0
- elsif type == Float
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = value.to_f rescue 0.0
- else
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = value
- end
- else
- if value.length > 2
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = yaml_load(value)
- else
- @form_to_show.form_show_in_result[num.to_s][key.to_s] = []
- end
- end
- else
- value.each do |sub_property,sub_value|
- type = Cancerpredictfields::FIELDINFO[sub_property.to_s]
- if type && Cancerpredictfields::Field_relations[type]
- type = Cancerpredictfields::Field_relations[type]
- end
- type = type.constantize rescue String
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ] = {} if @form_to_show.form_show_in_result[num.to_s][ sub_property ].nil?
- if type != Array
- if type == Fixnum
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value.to_i rescue 0
- elsif type == Float
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value.to_f rescue 0.0
- else
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][params[:locale].to_s] = sub_value
- end
- else
- if sub_value.length > 2
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][params[:locale].to_s] = yaml_load(sub_value)
- else
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][params[:locale].to_s] = []
- end
- end
- if(property["old_num"].present? && property["old_num"] != num.to_s)
- other_in_use_locales.each do |locale|
- @form_to_show.form_show_in_result[ num.to_s ][ sub_property ][locale] = @form_to_show.form_show_was[ property["old_num"] ][ sub_property ][locale]
- end
- end
- end
- end
- end
- end
- end
- org_nums = @form_to_show.form_show_in_result_was.keys
- remain_org_nums = params["cancerpredictfields"]["form_show_in_result"].values.map{|property| property["old_num"]}.select{|n| n.present?}
- delete_nums = org_nums - remain_org_nums
- if !delete_nums.blank?
- delete_nums.each do |delete_num|
- @form_to_show.form_show_in_result.delete(delete_num)
- end
- end
- @form_to_show.form_show_in_result = @form_to_show.form_show_in_result.values.map.with_index{|v,i| [i.to_s, v]}.to_h
- else
- @form_to_show.form_show_in_result = {}
- end
- @create_items = ['title_texts','form_result_is_right','text_descibe','years','table_above_texts','text_above_texts','surgery_only_texts','extra_texts','extra_therapy_texts','danger_texts','texts_between_Result_and_result_block','prediction_formula','hidden_variables','advance_mode','years_settings']
- params_cancer = params.require("cancerpredictfields").permit!
- @create_items.each do |item|
- if (@form_to_show[item].class == BSON::Document) || (@form_to_show.send(item).class == Hash)
- item_hash = @form_to_show[item]
- item_hash = item_hash.merge(params_cancer[item])
- @form_to_show[item] = item_hash
- elsif @form_to_show[item].class == Array
- if params_cancer[item].class != Array
- @form_to_show[item] = yaml_load(params_cancer[item]) rescue []
- else
- @form_to_show[item] = params_cancer[item]
- end
- @form_to_show[item] = [] if @form_to_show[item].class != Array
- else
- @form_to_show[item] = params_cancer[item]
- end
- end
- @size = ['small','medium','large']
- @size.each{|size| @form_to_show[size] = params["cancerpredictfields"][size].to_h}
- @file_path = Rails.root.to_s + '/app/assets/images/predict_tool'
- if !Dir.exist? @file_path
- FileUtils.mkdir_p @file_path
- end
- @images = params["cancerpredictfields"]['head_images']
- @head_images_id = @form_to_show.head_images_id
- @delete_index = []
- if !@images.nil?
- @images.each do |num,image|
- if num.to_i < @head_images_id.length && @head_images_id.length != 0
- if image['remove_image'] == "1"
- @delete_index.push num.to_i
- else
- @image_id = @head_images_id[num.to_i]
- @image = Headimages.find_by(:id=>@image_id.to_s)
- if !image['sort_number'].nil?
- @image.sort_number = image['sort_number'].to_i
- @image.save
- end
- next if image['temp_file'] == nil
- @file_name = image['temp_file'].original_filename.gsub('(','_').gsub(')','_').gsub(' ','_') rescue next
- @image.sort_number = image['sort_number'].to_i
- @image.temp_file = image['temp_file']
- @image.save
- end
- else
- @file_name = image['temp_file'].original_filename.gsub('(','_').gsub(')','_').gsub(' ','_') rescue next
- @headimages = Headimages.new(:cancerpredictfields_id => @form_to_show.id,:title => @app_title+'head_images')
- @headimages.temp_file = image['temp_file']
- @headimages.sort_number = image['sort_number'].to_i if !image['sort_number'].nil?
- @headimages.save
- @form_to_show.head_images_id.push @headimages.id
- end
- end
- end
- @delete_index.reverse!
- @delete_index.each do |i|
- @image_id = @head_images_id[i.to_i]
- Headimages.find_by(:id => @image_id ).destroy rescue next
- @form_to_show.head_images_id.delete(@image_id)
- end
- @images = params["cancerpredictfields"]['title_images']
- @title_images_id = @form_to_show.title_images_id
- @delete_index = []
- if !@images.nil?
- @images.each do |num,image|
- if num.to_i < @title_images_id.length && @title_images_id.length != 0
- if image['remove_image'] == "1"
- @delete_index.push num.to_i
- else
- @image_id = @title_images_id[num.to_i]
- @image = Headimages.find_by(:id=>@image_id.to_s)
- if !image['sort_number'].nil?
- @image.sort_number = image['sort_number'].to_i
- @image.save
- end
- next if image['temp_file'] == nil
- @file_name = image['temp_file'].original_filename.gsub('(','_').gsub(')','_').gsub(' ','_') rescue next
- @image.sort_number = image['sort_number'].to_i
- @image.temp_file = image['temp_file']
- @image.save
- end
- else
- @file_name = image['temp_file'].original_filename.gsub('(','_').gsub(')','_').gsub(' ','_') rescue next
- @headimages = Headimages.new(:cancerpredictfields_id => @form_to_show.id,:title => @app_title+'title_images' )
- @headimages.temp_file = image['temp_file']
- @headimages.sort_number = image['sort_number'].to_i if !image['sort_number'].nil?
- @headimages.save
- @form_to_show.title_images_id.push @headimages.id
- end
- end
- end
- @delete_index.reverse!
- @delete_index.each do |i|
- @image_id = @title_images_id[i.to_i]
- Headimages.find_by(:id => @image_id ).destroy rescue next
- @form_to_show.title_images_id.delete(@image_id)
- end
- file_ids = (@form_to_show.form_show.values + @form_to_show.form_show_in_result.values).map{|property| [property[:variable],property[:cancer_predict_mapping_file]]}.select{|k,f| f.present?}.to_h
- mapping_data_from_csv = {}
- if !file_ids.blank?
- file_ids.each do |k,v|
- mapping_data_from_csv[k] = read_mapping_file(v)
- end
- end
- @form_to_show.mapping_data_from_csv = mapping_data_from_csv.to_json
- @form_to_show.save
- fork do
- @form_to_show.auto_write_predict_js
- end
- end
- @index = 0
- Dir.chdir("public") do
- while File.exist?('cancerfield_back'+@index.to_s+'.txt')
- @index += 1
- end
- end
- Dir.chdir("public") do
- @site_locales = Site.last.in_use_locales.each do |locale|
- I18n.with_locale(locale) do
- @file_tmp = File.new("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt", 'w')
- tmp_table_texts = create_table(locale)
- @file_tmp.write(tmp_table_texts)
- @file_tmp.close
- end
- end
- end
- Dir.chdir("public") do
- @file_back = File.open('cancerfield_back'+@index.to_s+'.txt', 'w')
- @file_back.write(@form_to_show.attributes)
- @file_back.close
- @file_org = File.open('cancerfield_org'+@index.to_s+'.txt', 'w')
- @file_org.write(Cancerpredictfields.where("title"=>@app_title+'_back').first.attributes)
- @file_org.close
- end
- redirect_to admin_cancerpredicts_path
+
+ def edit
+ other_in_use_locales = Site.first.in_use_locales.map { |l| l.to_s }
+ other_in_use_locales.delete(params[:locale])
+ if !(params["cancerpredictfields"].nil?)
+ if !(params["cancerpredictfields"]["form_show"].nil?)
+ params["cancerpredictfields"]["form_show"].each do |num, property|
+ property.each do |key, value|
+ if key.include?("_file") && (!value[:temp_file].blank? rescue false)
+ if value[:id].nil?
+ mapping_file = CancerPredictMappingFile.create(value)
+ else
+ mapping_file = CancerPredictMappingFile.find(value[:id])
+ mapping_file.temp_file = value[:temp_file]
+ mapping_file.save
+ end
+ @form_to_show.form_show[num.to_s][key.to_s] = mapping_file.id
+ elsif key.include?("_file")
+ if value[:_destroy] == "1"
+ mapping_file = CancerPredictMappingFile.find(value[:id])
+ mapping_file.destroy
+ @form_to_show.form_show[num.to_s][key.to_s] = ""
+ end
+ end
+ next if key.include?("_file")
+ if (key != "old_num")
+ if key != params[:locale]
+ @form_to_show.form_show[num.to_s] = {} if @form_to_show.form_show[num.to_s].nil?
+ type = Cancerpredictfields::FIELDINFO[key.to_s]
+ if type && Cancerpredictfields::Field_relations[type]
+ type = Cancerpredictfields::Field_relations[type]
+ end
+ type = type.constantize rescue String
+ if type != Array
+ if type == Fixnum
+ @form_to_show.form_show[num.to_s][key.to_s] = value.to_i rescue 0
+ elsif type == Float
+ @form_to_show.form_show[num.to_s][key.to_s] = value.to_f rescue 0.0
+ else
+ @form_to_show.form_show[num.to_s][key.to_s] = value
+ end
+ else
+ if value.length > 2
+ @form_to_show.form_show[num.to_s][key.to_s] = yaml_load(value)
+ else
+ @form_to_show.form_show[num.to_s][key.to_s] = []
+ end
+ end
+ else
+ value.each do |sub_property, sub_value|
+ type = Cancerpredictfields::FIELDINFO[sub_property.to_s]
+ if type && Cancerpredictfields::Field_relations[type]
+ type = Cancerpredictfields::Field_relations[type]
+ end
+ type = type.constantize rescue String
+ @form_to_show.form_show[num.to_s][sub_property] = {} if @form_to_show.form_show[num.to_s][sub_property].nil?
+ if type != Array
+ if type == Fixnum
+ @form_to_show.form_show[num.to_s][sub_property][params[:locale].to_s] = sub_value.to_i rescue 0
+ elsif type == Float
+ @form_to_show.form_show[num.to_s][sub_property][params[:locale].to_s] = sub_value.to_f rescue 0.0
+ else
+ @form_to_show.form_show[num.to_s][sub_property][params[:locale].to_s] = sub_value
+ end
+ else
+ if sub_value.length > 2
+ @form_to_show.form_show[num.to_s][sub_property][params[:locale].to_s] = yaml_load(sub_value)
+ else
+ @form_to_show.form_show[num.to_s][sub_property][params[:locale].to_s] = []
+ end
+ end
+ if (property["old_num"].present? && property["old_num"] != num.to_s)
+ other_in_use_locales.each do |locale|
+ @form_to_show.form_show[num.to_s][sub_property][locale] = @form_to_show.form_show_was[property["old_num"]][sub_property][locale]
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ org_nums = @form_to_show.form_show_was.keys
+ remain_org_nums = params["cancerpredictfields"]["form_show"].values.map { |property| property["old_num"] }.select { |n| n.present? }
+ delete_nums = org_nums - remain_org_nums
+ if !delete_nums.blank?
+ delete_nums.each do |delete_num|
+ @form_to_show.form_show.delete(delete_num)
+ end
+ end
+ @form_to_show.form_show = @form_to_show.form_show.values.map.with_index { |v, i| [i.to_s, v] }.to_h
+ else
+ @form_to_show.form_show = {}
+ end
+ if !params["cancerpredictfields"]["form_show_in_result"].nil?
+ params["cancerpredictfields"]["form_show_in_result"].each do |num, property|
+ property.each do |key, value|
+ if key.include?("_file") && (!value[:temp_file].blank? rescue false)
+ if value[:id].nil?
+ mapping_file = CancerPredictMappingFile.create(value)
+ else
+ mapping_file = CancerPredictMappingFile.find(value[:id])
+ mapping_file.temp_file = value[:temp_file]
+ mapping_file.save
+ end
+ @form_to_show.form_show[num.to_s][key.to_s] = mapping_file.id
+ elsif key.include?("_file")
+ if value[:_destroy] == "1"
+ mapping_file = CancerPredictMappingFile.find(value[:id])
+ mapping_file.destroy
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = ""
+ end
+ end
+ next if key.include?("_file")
+ if (key != "old_num")
+ if key != params[:locale]
+ @form_to_show.form_show_in_result[num.to_s] = {} if @form_to_show.form_show_in_result[num.to_s].nil?
+ type = Cancerpredictfields::FIELDINFO[key.to_s]
+ if type && Cancerpredictfields::Field_relations[type]
+ type = Cancerpredictfields::Field_relations[type]
+ end
+ type = type.constantize rescue String
+ if type != Array
+ if type == Fixnum
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = value.to_i rescue 0
+ elsif type == Float
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = value.to_f rescue 0.0
+ else
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = value
+ end
+ else
+ if value.length > 2
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = yaml_load(value)
+ else
+ @form_to_show.form_show_in_result[num.to_s][key.to_s] = []
+ end
+ end
+ else
+ value.each do |sub_property, sub_value|
+ type = Cancerpredictfields::FIELDINFO[sub_property.to_s]
+ if type && Cancerpredictfields::Field_relations[type]
+ type = Cancerpredictfields::Field_relations[type]
+ end
+ type = type.constantize rescue String
+ @form_to_show.form_show_in_result[num.to_s][sub_property] = {} if @form_to_show.form_show_in_result[num.to_s][sub_property].nil?
+ if type != Array
+ if type == Fixnum
+ @form_to_show.form_show_in_result[num.to_s][sub_property][params[:locale].to_s] = sub_value.to_i rescue 0
+ elsif type == Float
+ @form_to_show.form_show_in_result[num.to_s][sub_property][params[:locale].to_s] = sub_value.to_f rescue 0.0
+ else
+ @form_to_show.form_show_in_result[num.to_s][sub_property][params[:locale].to_s] = sub_value
+ end
+ else
+ if sub_value.length > 2
+ @form_to_show.form_show_in_result[num.to_s][sub_property][params[:locale].to_s] = yaml_load(sub_value)
+ else
+ @form_to_show.form_show_in_result[num.to_s][sub_property][params[:locale].to_s] = []
+ end
+ end
+ if (property["old_num"].present? && property["old_num"] != num.to_s)
+ other_in_use_locales.each do |locale|
+ @form_to_show.form_show_in_result[num.to_s][sub_property][locale] = @form_to_show.form_show_was[property["old_num"]][sub_property][locale]
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ org_nums = @form_to_show.form_show_in_result_was.keys
+ remain_org_nums = params["cancerpredictfields"]["form_show_in_result"].values.map { |property| property["old_num"] }.select { |n| n.present? }
+ delete_nums = org_nums - remain_org_nums
+ if !delete_nums.blank?
+ delete_nums.each do |delete_num|
+ @form_to_show.form_show_in_result.delete(delete_num)
+ end
+ end
+ @form_to_show.form_show_in_result = @form_to_show.form_show_in_result.values.map.with_index { |v, i| [i.to_s, v] }.to_h
+ else
+ @form_to_show.form_show_in_result = {}
+ end
+ @create_items = ["title_texts", "form_result_is_right", "text_descibe", "years", "table_above_texts", "text_above_texts", "surgery_only_texts", "extra_texts", "extra_therapy_texts", "danger_texts", "texts_between_Result_and_result_block", "prediction_formula", "hidden_variables", "advance_mode", "years_settings"]
+ params_cancer = params.require("cancerpredictfields").permit!
+ @create_items.each do |item|
+ if (@form_to_show[item].class == BSON::Document) || (@form_to_show.send(item).class == Hash)
+ item_hash = @form_to_show[item]
+ item_hash = item_hash.merge(params_cancer[item])
+ @form_to_show[item] = item_hash
+ elsif @form_to_show[item].class == Array
+ if params_cancer[item].class != Array
+ @form_to_show[item] = yaml_load(params_cancer[item]) rescue []
+ else
+ @form_to_show[item] = params_cancer[item]
+ end
+ @form_to_show[item] = [] if @form_to_show[item].class != Array
+ else
+ @form_to_show[item] = params_cancer[item]
+ end
+ end
+ @size = ["small", "medium", "large"]
+ @size.each { |size| @form_to_show[size] = params["cancerpredictfields"][size].to_h }
+ @file_path = Rails.root.to_s + "/app/assets/images/predict_tool"
+ if !Dir.exist? @file_path
+ FileUtils.mkdir_p @file_path
+ end
+ @images = params["cancerpredictfields"]["head_images"]
+ @head_images_id = @form_to_show.head_images_id
+ @delete_index = []
+ if !@images.nil?
+ @images.each do |num, image|
+ if num.to_i < @head_images_id.length && @head_images_id.length != 0
+ if image["remove_image"] == "1"
+ @delete_index.push num.to_i
+ else
+ @image_id = @head_images_id[num.to_i]
+ @image = Headimages.find_by(:id => @image_id.to_s)
+ if !image["sort_number"].nil?
+ @image.sort_number = image["sort_number"].to_i
+ @image.save
+ end
+ next if image["temp_file"] == nil
+ @file_name = image["temp_file"].original_filename.gsub("(", "_").gsub(")", "_").gsub(" ", "_") rescue next
+ @image.sort_number = image["sort_number"].to_i
+ @image.temp_file = image["temp_file"]
+ @image.save
+ end
+ else
+ @file_name = image["temp_file"].original_filename.gsub("(", "_").gsub(")", "_").gsub(" ", "_") rescue next
+ @headimages = Headimages.new(:cancerpredictfields_id => @form_to_show.id, :title => @app_title + "head_images")
+ @headimages.temp_file = image["temp_file"]
+ @headimages.sort_number = image["sort_number"].to_i if !image["sort_number"].nil?
+ @headimages.save
+ @form_to_show.head_images_id.push @headimages.id
+ end
+ end
+ end
+ @delete_index.reverse!
+ @delete_index.each do |i|
+ @image_id = @head_images_id[i.to_i]
+ Headimages.find_by(:id => @image_id).destroy rescue next
+ @form_to_show.head_images_id.delete(@image_id)
+ end
+ @images = params["cancerpredictfields"]["title_images"]
+ @title_images_id = @form_to_show.title_images_id
+ @delete_index = []
+ if !@images.nil?
+ @images.each do |num, image|
+ if num.to_i < @title_images_id.length && @title_images_id.length != 0
+ if image["remove_image"] == "1"
+ @delete_index.push num.to_i
+ else
+ @image_id = @title_images_id[num.to_i]
+ @image = Headimages.find_by(:id => @image_id.to_s)
+ if !image["sort_number"].nil?
+ @image.sort_number = image["sort_number"].to_i
+ @image.save
+ end
+ next if image["temp_file"] == nil
+ @file_name = image["temp_file"].original_filename.gsub("(", "_").gsub(")", "_").gsub(" ", "_") rescue next
+ @image.sort_number = image["sort_number"].to_i
+ @image.temp_file = image["temp_file"]
+ @image.save
+ end
+ else
+ @file_name = image["temp_file"].original_filename.gsub("(", "_").gsub(")", "_").gsub(" ", "_") rescue next
+ @headimages = Headimages.new(:cancerpredictfields_id => @form_to_show.id, :title => @app_title + "title_images")
+ @headimages.temp_file = image["temp_file"]
+ @headimages.sort_number = image["sort_number"].to_i if !image["sort_number"].nil?
+ @headimages.save
+ @form_to_show.title_images_id.push @headimages.id
+ end
+ end
+ end
+ @delete_index.reverse!
+ @delete_index.each do |i|
+ @image_id = @title_images_id[i.to_i]
+ Headimages.find_by(:id => @image_id).destroy rescue next
+ @form_to_show.title_images_id.delete(@image_id)
+ end
+ file_ids = (@form_to_show.form_show.values + @form_to_show.form_show_in_result.values).map { |property| [property[:variable], property[:cancer_predict_mapping_file]] }.select { |k, f| f.present? }.to_h
+ mapping_data_from_csv = {}
+ if !file_ids.blank?
+ file_ids.each do |k, v|
+ mapping_data_from_csv[k] = read_mapping_file(v)
+ end
+ end
+ @form_to_show.mapping_data_from_csv = mapping_data_from_csv.to_json
+ @form_to_show.save
+ fork do
+ @form_to_show.auto_write_predict_js
+ end
+ end
+ @index = 0
+ Dir.chdir("public") do
+ while File.exist?("cancerfield_back" + @index.to_s + ".txt")
+ @index += 1
+ end
+ end
+ Dir.chdir("public") do
+ @site_locales = Site.last.in_use_locales.each do |locale|
+ I18n.with_locale(locale) do
+ @file_tmp = File.new("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt", "w")
+ tmp_table_texts = create_table(locale)
+ @file_tmp.write(tmp_table_texts)
+ @file_tmp.close
+ end
+ end
+ end
+ Dir.chdir("public") do
+ @file_back = File.open("cancerfield_back" + @index.to_s + ".txt", "w")
+ @file_back.write(@form_to_show.attributes)
+ @file_back.close
+ @file_org = File.open("cancerfield_org" + @index.to_s + ".txt", "w")
+ @file_org.write(Cancerpredictfields.where("title" => @app_title + "_back").first.attributes)
+ @file_org.close
+ end
+ redirect_to admin_cancerpredicts_path
end
+
def create_table(current_locale)
- create_first_field
- current_site = Site.last
- @size = {}
- @size_name = ['small','medium','large']
- @size_name.each{|name| @size[name] = @form_to_show[name]['font_size']}
- @size_active_size = ''
- @size.each{|size_key,size_value| (@form_to_show[size_key]['active'].to_i == 1) ? ( @size_active_size = size_value ): nil }
- @table_str = '
'
- @table_str += '
'+@form_to_show.text_descibe[current_locale] +'
'
- @table_str += '
'+''
- @size.each{|size_key,size_value| @table_str += ('' )}
- @table_str += '
'
- @table_str_left = '
'
- @table_str_right = '
'
- @form_to_show.form_show.each do |num,property|
- @field_property = {}
- property.each do |key,value|
- @value= value
- @disp_value
- if @value.class == BSON::Document || @value.class == Hash
- @disp_value = @value[current_locale] rescue ""
- else
- @disp_value = @value
- end
- @disp_value = "" if @disp_value.nil?
- @field_property[key] = @disp_value
- end
- if @field_property['right'] == 0
- next if @field_property["name"].blank?
- @table_str_left += '
'
- @table_str_left += '
'
- if @field_property["comment_text"].present?
- @table_str_left += '
'
- @table_str_left += '
'
- else
- @site_locales = current_site.in_use_locales
- @site_locales.delete(current_locale)
- @site_locales.each do |locale|
- next if property["comment_text"][locale.to_s].blank?
- @field_property["comment_text"] = property["comment_text"][locale.to_s]
- break
- end
- if @field_property["comment_text"].present?
- @table_str_left += '
'
- @table_str_left += '
'
- else
- @table_str_left += '
'
- end
- end
- if @field_property["is_num"] == 1
- if @field_property["is_float"] == 1
- @table_str_left += '
'
- else
- if @field_property["range"] == []
- @table_str_left += '
'
- else
- @table_str_left += '
'
- end
- end
- else
- @table_str_left += '
'
- @field_property["choice_fields"].each do |create_choice|
- @table_str_left += ''
- @table_str_left += ''
- end
- @table_str_left += '
'
- end
- if @field_property["hint"].to_s != ""
- @table_str_left +='
'+@field_property["hint"]+'
'
- end
- @table_str_left += '
'
- else
- @table_str_right += '
'
- break if @field_property["name"] == ""
- @table_str_right += '
'
- if @field_property["comment_text"].present?
- @table_str_right += '
'
- @table_str_right += '
'
- else
- @site_locales = current_site.in_use_locales
- @site_locales.delete(current_locale)
- @site_locales.each do |locale|
- next if property["comment_text"][locale.to_s].blank?
- @field_property["comment_text"] = property["comment_text"][locale.to_s]
- break
- end
- if @field_property["comment_text"].present?
- @table_str_right += '
'
- @table_str_right += '
'
- else
- @table_str_right += '
'
- end
- end
- if @field_property["is_num"] == 1
- if @field_property["is_float"] == 1
- @table_str_right += '
'
- else
- if @field_property["range"] == []
- @table_str_left += '
'
- else
- @table_str_right += '
'
- end
- end
- else
- @table_str_right += '
'
- @field_property["choice_fields"].each do |create_choice|
- @table_str_right += ''
- @table_str_right += ''
- end
- @table_str_right += '
'
- end
- if @field_property["hint"].to_s != ""
- @table_str_right +='
'+@field_property["hint"]+'
'
- end
- @table_str_right += '
'
- end
- end
- @table_str_left += '
'
- @table_str_right += '
'
- @table_str += (@table_str_left+@table_str_right)
- @table_str +='
'
- @table_result_str = '
'+t("cancerpredict.table.result").to_s+''
- @tab_name = ['table','text']
- @table_result_str +='
' + @form_to_show.texts_between_Result_and_result_block[current_locale]+'
'
- @table_result_str += '
'
- @tab_name.each_with_index{|name,index| @table_result_str += ('
')}
- @table_result_str += '
'
- @tab_name.each{|name| @table_result_str += '
'}
- @table_result_str += '
'
- @table_button = '
')
- @table_result_choice_fileds = '' if @form_to_show.form_result_is_right == 1
- @table_result_choice_fileds = '
' if @form_to_show.form_result_is_right == 0
- @table_result_choice_fileds += '
'+t('cancerpredict.table.Therapy_choice').to_s+''
- @table_result_choice_fileds += '
'
- @form_to_show.form_show_in_result.each do |num,property|
- @field_property = {}
- property.each do |key,value|
- @value= value
- if @value.class == BSON::Document || @value.class == Hash
- @disp_value = @value[current_locale.to_s] rescue ""
- else
- @disp_value = @value
- end
- @disp_value = "" if @disp_value.nil?
- @field_property[key] = @disp_value
- end
- @table_result_choice_fileds += '
'
- break if @field_property["name"] == ""
- @table_result_choice_fileds += '
'
- if @field_property["comment_text"].present?
- @table_result_choice_fileds += '
'
- @table_result_choice_fileds += '
'
- else
- @site_locales = current_site.in_use_locales
- @site_locales.delete(current_locale)
- @site_locales.each do |locale|
- next if property["comment_text"][locale.to_s].blank?
- @field_property["comment_text"] = property["comment_text"][locale.to_s]
- break
- end
- if @field_property["comment_text"].present?
- @table_result_choice_fileds += '
'
- @table_result_choice_fileds += '
'
- else
- @table_result_choice_fileds += '
'
- end
- end
- if @field_property["is_num"] == 1
- if @field_property["is_float"] == 1
- @table_result_choice_fileds += '
'
- else
- if @field_property["range"] == []
- @table_str_left += '
'
- else
- @table_result_choice_fileds += '
'
- @table_str_left += '
'
- @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice"
- @table_result_choice_fileds += '
'
- end
- end
- else
- @table_result_choice_fileds += '
'
- @field_property["choice_fields"].each do |create_choice|
- @table_result_choice_fileds += ''
- @table_result_choice_fileds += ''
- end
- @table_result_choice_fileds += '
'
- end
- if @field_property["hint"].to_s != ""
- @table_result_choice_fileds +='
'+@field_property["hint"]+'
'
- end
- @table_result_choice_fileds += '
'
- end
- @table_result_choice_fileds += '
'
- @table_str += (@table_button+'
'+@table_result_str+@table_result_choice_fileds+'
'+'
')
- return @table_str
+ create_first_field
+ current_site = Site.last
+ @size = {}
+ @size_name = ["small", "medium", "large"]
+ @size_name.each { |name| @size[name] = @form_to_show[name]["font_size"] }
+ @size_active_size = ""
+ @size.each { |size_key, size_value| (@form_to_show[size_key]["active"].to_i == 1) ? (@size_active_size = size_value) : nil }
+ @table_str = '
'
+ @table_str += '
' + @form_to_show.text_descibe[current_locale] + "
"
+ @table_str += '
' + '"
+ @size.each { |size_key, size_value| @table_str += ('") }
+ @table_str += '
'
+ @table_str_left = '
'
+ @table_str_right = '
'
+ @form_to_show.form_show.each do |num, property|
+ @field_property = {}
+ property.each do |key, value|
+ @value = value
+ @disp_value
+ if @value.class == BSON::Document || @value.class == Hash
+ @disp_value = @value[current_locale] rescue ""
+ else
+ @disp_value = @value
+ end
+ @disp_value = "" if @disp_value.nil?
+ @field_property[key] = @disp_value
+ end
+ if @field_property["right"] == 0
+ next if @field_property["name"].blank?
+ @table_str_left += "
"
+ @table_str_left += '"
+ if @field_property["comment_text"].present?
+ @table_str_left += ''
+ @table_str_left += ''
+ @table_str_left += '
'
+ end
+ end
+ if @field_property["is_num"] == 1
+ if @field_property["is_float"] == 1
+ @table_str_left += '
'
+ else
+ if @field_property["range"] == []
+ @table_str_left += '
'
+ else
+ @table_str_left += '
"
+ end
+ end
+ else
+ @table_str_left += '
'
+ @field_property["choice_fields"].each do |create_choice|
+ @table_str_left += '"
+ @table_str_left += ''
+ end
+ @table_str_left += "
"
+ end
+ if @field_property["hint"].to_s != ""
+ @table_str_left += '
' + @field_property["hint"] + "
"
+ end
+ @table_str_left += '
'
+ else
+ @table_str_right += "
"
+ break if @field_property["name"] == ""
+ @table_str_right += '"
+ if @field_property["comment_text"].present?
+ @table_str_right += ''
+ @table_str_right += ''
+ @table_str_right += '
'
+ end
+ end
+ if @field_property["is_num"] == 1
+ if @field_property["is_float"] == 1
+ @table_str_right += '
'
+ else
+ if @field_property["range"] == []
+ @table_str_left += '
'
+ else
+ @table_str_right += '
"
+ end
+ end
+ else
+ @table_str_right += '
'
+ @field_property["choice_fields"].each do |create_choice|
+ @table_str_right += '"
+ @table_str_right += ''
+ end
+ @table_str_right += "
"
+ end
+ if @field_property["hint"].to_s != ""
+ @table_str_right += '
' + @field_property["hint"] + "
"
+ end
+ @table_str_right += '
'
+ end
+ end
+ @table_str_left += "
"
+ @table_str_right += "
"
+ @table_str += (@table_str_left + @table_str_right)
+ @table_str += ''
+ @table_result_str = '' + t("cancerpredict.table.result").to_s + ''
+ @tab_name = ["table", "text"]
+ @table_result_str += '
' + @form_to_show.texts_between_Result_and_result_block[current_locale] + "
"
+ @table_result_str += '
'
+ @tab_name.each_with_index { |name, index| @table_result_str += ('
') }
+ @table_result_str += '
'
+ @tab_name.each { |name| @table_result_str += '
" }
+ @table_result_str += "
"
+ @table_button = '')
+ @table_result_choice_fileds = '' if @form_to_show.form_result_is_right == 1
+ @table_result_choice_fileds = '
' if @form_to_show.form_result_is_right == 0
+ @table_result_choice_fileds += '
' + t("cancerpredict.table.Therapy_choice").to_s + ''
+ @table_result_choice_fileds += '
'
+ @form_to_show.form_show_in_result.each do |num, property|
+ @field_property = {}
+ property.each do |key, value|
+ @value = value
+ if @value.class == BSON::Document || @value.class == Hash
+ @disp_value = @value[current_locale.to_s] rescue ""
+ else
+ @disp_value = @value
+ end
+ @disp_value = "" if @disp_value.nil?
+ @field_property[key] = @disp_value
+ end
+ @table_result_choice_fileds += "
"
+ break if @field_property["name"] == ""
+ @table_result_choice_fileds += '"
+ if @field_property["comment_text"].present?
+ @table_result_choice_fileds += ''
+ @table_result_choice_fileds += ''
+ @table_result_choice_fileds += '
'
+ end
+ end
+ if @field_property["is_num"] == 1
+ if @field_property["is_float"] == 1
+ @table_result_choice_fileds += '
'
+ else
+ if @field_property["range"] == []
+ @table_str_left += '
'
+ else
+ @table_result_choice_fileds += '
'
+ @table_str_left += '
'
+ @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice"
+ @table_result_choice_fileds += '
"
+ end
+ end
+ else
+ @table_result_choice_fileds += '
'
+ @field_property["choice_fields"].each do |create_choice|
+ @table_result_choice_fileds += '"
+ @table_result_choice_fileds += ''
+ end
+ @table_result_choice_fileds += "
"
+ end
+ if @field_property["hint"].to_s != ""
+ @table_result_choice_fileds += '
' + @field_property["hint"] + "
"
+ end
+ @table_result_choice_fileds += '
'
+ end
+ @table_result_choice_fileds += "
"
+ @table_str += (@table_button + '' + @table_result_str + @table_result_choice_fileds + "
" + '')
+ return @table_str
end
+
def showSubmit
- @page_num = params[:page] || 1
- @results = Cancerpredictrecord.where("title"=>@app_title).desc(:id).page(@page_num).per(10)
- @variables = []
- @names = []
- @form_to_show.form_show.each do |num,property|
- property.each do |key,value|
- if key == "variable"
- @variables.push value
- elsif key == "name"
- @names.push value[I18n.locale.to_s]
- end
- end
- end
- @result_variables = []
- @result_names = []
- @indexs=[]
- @choicenames=[]
- if @results.length != 0
- @results[0].result.each{|key,value| @result_variables.push key} rescue nil
- @result_variables.each do |variable|
- @index = @variables.index(variable.to_s)
- @result_names.push @names[@index] if !@index.nil?
- @indexs.push @index if !@index.nil?
- end
- @indexs.each do |index|
- if @form_to_show.form_show[index.to_s]["is_num"] == 1 || @form_to_show.form_show[index.to_s]["is_float"] == 1
- @choicenames.push ""
- else
- @choicenames.push @form_to_show.form_show[index.to_s]["choice_fields"][I18n.locale.to_s]
- end
- end
- end
- @pagination = create_pagination(@page_num.to_i)
+ @page_num = params[:page] || 1
+ @results = Cancerpredictrecord.where("title" => @app_title).desc(:id).page(@page_num).per(10)
+ @variables = []
+ @names = []
+ @form_to_show.form_show.each do |num, property|
+ property.each do |key, value|
+ if key == "variable"
+ @variables.push value
+ elsif key == "name"
+ @names.push value[I18n.locale.to_s]
+ end
+ end
+ end
+ @result_variables = []
+ @result_names = []
+ @indexs = []
+ @choicenames = []
+ if @results.length != 0
+ @results[0].result.each { |key, value| @result_variables.push key } rescue nil
+ @result_variables.each do |variable|
+ @index = @variables.index(variable.to_s)
+ @result_names.push @names[@index] if !@index.nil?
+ @indexs.push @index if !@index.nil?
+ end
+ @indexs.each do |index|
+ if @form_to_show.form_show[index.to_s]["is_num"] == 1 || @form_to_show.form_show[index.to_s]["is_float"] == 1
+ @choicenames.push ""
+ else
+ @choicenames.push @form_to_show.form_show[index.to_s]["choice_fields"][I18n.locale.to_s]
+ end
+ end
+ end
+ @pagination = create_pagination(@page_num.to_i)
end
+
def export_cancer_tool_record
- cancer_records = Cancerpredictrecord.where("title"=>@app_title).desc(:id)
- dir_path = 'tmp/cancer_tool/'
- #FileUtils.rm_r(dir_path, :force => true) if Dir.exist?(dir_path)
- FileUtils.mkdir dir_path if !Dir.exist?(dir_path) #create dir for storing tmp_file if dir doesn't exist
- @filename = ("#{Time.now.year}_%02s_%02s_export_cancer_tool_record.xlsx"%[Time.now.month,Time.now.day]).gsub(" ","0")
- Dir.chdir(dir_path) do
- File.open(@filename, 'w') do |f|
- f.write render_to_string( :handlers=> [:axlsx], :formats=> [:xlsx] ,:partial=> 'export_cancer_tool_record.xlsx',:locals=> {:results=> cancer_records} )
- end
- end
- tmp_filename_data = File.read(dir_path +@filename)
- send_data(tmp_filename_data, type: 'application/xlsx', disposition: 'attachment', filename: @filename)
+ cancer_records = Cancerpredictrecord.where("title" => @app_title).desc(:id)
+ dir_path = "tmp/cancer_tool/"
+ #FileUtils.rm_r(dir_path, :force => true) if Dir.exist?(dir_path)
+ FileUtils.mkdir dir_path if !Dir.exist?(dir_path) #create dir for storing tmp_file if dir doesn't exist
+ @filename = ("#{Time.now.year}_%02s_%02s_export_cancer_tool_record.xlsx" % [Time.now.month, Time.now.day]).gsub(" ", "0")
+ Dir.chdir(dir_path) do
+ File.open(@filename, "w") do |f|
+ f.write render_to_string(:handlers => [:axlsx], :formats => [:xlsx], :partial => "export_cancer_tool_record.xlsx", :locals => { :results => cancer_records })
+ end
+ end
+ tmp_filename_data = File.read(dir_path + @filename)
+ send_data(tmp_filename_data, type: "application/xlsx", disposition: "attachment", filename: @filename)
end
+
def create_first_field
- if Cancerpredictfields.where("title"=>(@app_title + "_back")).take_while{true}.count == 0
- @form_to_show = Cancerpredictfields.new()
- @form_to_show.title = @app_title +"_back"
- @form_to_show.save
- end
- @form_to_show
- if Cancerpredictfields.where("title"=>@app_title).take_while{true}.count == 0
- @form_to_show = Cancerpredictfields.new()
- @form_to_show.title=@app_title
- @form_to_show.save
- @form_to_show = Cancerpredictfields.where("title"=>@app_title).first
- Dir.chdir("public") do
- @site_locales = Site.last.in_use_locales.each do |locale|
- I18n.with_locale(locale) do
- @file_tmp = File.new("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt", 'w')
- tmp_table_texts = create_table(locale)
- @file_tmp.write(tmp_table_texts)
- @file_tmp.close
- end
- end
- end
- else
- @form_to_show = Cancerpredictfields.where("title"=>@app_title).first
- end
+ if Cancerpredictfields.where("title" => (@app_title + "_back")).take_while { true }.count == 0
+ @form_to_show = Cancerpredictfields.new()
+ @form_to_show.title = @app_title + "_back"
+ @form_to_show.save
+ end
+ @form_to_show
+ if Cancerpredictfields.where("title" => @app_title).take_while { true }.count == 0
+ @form_to_show = Cancerpredictfields.new()
+ @form_to_show.title = @app_title
+ @form_to_show.save
+ @form_to_show = Cancerpredictfields.where("title" => @app_title).first
+ Dir.chdir("public") do
+ @site_locales = Site.last.in_use_locales.each do |locale|
+ I18n.with_locale(locale) do
+ @file_tmp = File.new("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt", "w")
+ tmp_table_texts = create_table(locale)
+ @file_tmp.write(tmp_table_texts)
+ @file_tmp.close
+ end
+ end
+ end
+ else
+ @form_to_show = Cancerpredictfields.where("title" => @app_title).first
+ end
end
- def create_pagination(page=1,fields=Cancerpredictrecord.all,extra_params="")
- page = 1 if page == 0
- per_page_num = 10.0
- all_page_num = (fields.count / per_page_num).ceil
- all_page_num = 1 if all_page_num == 0
- pagination = ''+((I18n.locale.to_s == 'zh_tw') ? "第 #{page} 頁" : "page #{page}") +'/'+ ((I18n.locale.to_s == 'zh_tw') ? "共 #{all_page_num} 頁" : "Total #{all_page_num} page(s)")+'
'+
- ((page == 1) ? '- ['+I18n.t('cancerpredict.prev_page')+']
' : '- ['+I18n.t('cancerpredict.prev_page')+']
')
- if all_page_num > 7
- if page <= (all_page_num / 2)
- if page <= 7
- (1..page).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- else
- (1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- pagination +='- ...
'
- (page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- end
- (page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- pagination +='- ...
'
- (all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- else
- (1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- pagination +='- ...
'
- (page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- if all_page_num - page <= 7
- (page+1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- else
- (page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- pagination +='- ...
'
- (all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- end
- end
- else
- (1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '- ['+page_num.to_s+']
' : '- '+page_num.to_s+'
')}
- end
- pagination += (((page==all_page_num) ? '- ['+I18n.t('cancerpredict.next_page')+']
' : '- ['+I18n.t('cancerpredict.next_page')+']
')+'
')
+
+ def create_pagination(page = 1, fields = Cancerpredictrecord.all, extra_params = "")
+ page = 1 if page == 0
+ per_page_num = 10.0
+ all_page_num = (fields.count / per_page_num).ceil
+ all_page_num = 1 if all_page_num == 0
+ pagination = '' + ((I18n.locale.to_s == "zh_tw") ? "第 #{page} 頁" : "page #{page}") + "/" + ((I18n.locale.to_s == "zh_tw") ? "共 #{all_page_num} 頁" : "Total #{all_page_num} page(s)") + '
' +
+ ((page == 1) ? "- [" + I18n.t("cancerpredict.prev_page") + "]
" : '- [' + I18n.t("cancerpredict.prev_page") + "]
")
+ if all_page_num > 7
+ if page <= (all_page_num / 2)
+ if page <= 7
+ (1..page).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ else
+ (1..3).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ pagination += "- ...
"
+ (page - 3..page).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ end
+ (page + 1..page + 3).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ pagination += "- ...
"
+ (all_page_num - 2..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ else
+ (1..3).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ pagination += "- ...
"
+ (page - 3..page).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ if all_page_num - page <= 7
+ (page + 1..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ else
+ (page + 1..page + 3).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ pagination += "- ...
"
+ (all_page_num - 2..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ end
+ end
+ else
+ (1..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "- [" + page_num.to_s + "]
" : '- ' + page_num.to_s + "
") }
+ end
+ pagination += (((page == all_page_num) ? "- [" + I18n.t("cancerpredict.next_page") + "]
" : '- [' + I18n.t("cancerpredict.next_page") + "]
") + "
")
end
- def read_mapping_file(mapping_file_id)
- mapping_file = CancerPredictMappingFile.find(mapping_file_id) rescue nil
- if !mapping_file.nil?
- csv_rows = CSV.read(mapping_file.temp_file.file.path)
- titles = csv_rows[0]
- infos = {}
- titles.each_with_index do |title,i|
- infos[title] = []
- csv_rows[1..-1].each do |row|
- infos[title] << row[i].to_f
- end
- end
- return infos
- else
- return {}
- end
- end
-end
\ No newline at end of file
+
+ def read_mapping_file(mapping_file_id)
+ mapping_file = CancerPredictMappingFile.find(mapping_file_id) rescue nil
+ if !mapping_file.nil?
+ csv_rows = CSV.read(mapping_file.temp_file.file.path)
+ titles = csv_rows[0]
+ infos = {}
+ titles.each_with_index do |title, i|
+ infos[title] = []
+ csv_rows[1..-1].each do |row|
+ infos[title] << row[i].to_f
+ end
+ end
+ return infos
+ else
+ return {}
+ end
+ end
+end
diff --git a/app/controllers/cancerpredicts_controller.rb b/app/controllers/cancerpredicts_controller.rb
index f4d1efb..c443187 100644
--- a/app/controllers/cancerpredicts_controller.rb
+++ b/app/controllers/cancerpredicts_controller.rb
@@ -1,221 +1,227 @@
# encoding: utf-8
-require 'rubyXL'
+require "rubyXL"
require "json"
+
class CancerpredictsController < ApplicationController
def initialize
super
@app_title = "cancerpredict"
end
+
def calculate
- create_first_field
- if params['header'].to_i == 1
- locale = params['locale'].to_s rescue 'zh_tw'
- locale = 'zh_tw' if locale == 'zh_cn'
- result = {}
- @head_images = {}
- @form_to_show.head_images_id.each do |image_id|
- next if image_id.to_s == ""
- @image = Headimages.find_by(:id=>image_id.to_s)
- @url = @image.temp_file.to_s
- @head_images[@image.sort_number.to_i] = ('')
- end
- result['head_images'] = Hash[@head_images.sort].values.join('')
- @head_images = {}
- @form_to_show.title_images_id.each do |image_id|
- next if image_id.to_s == ""
- @image = Headimages.find_by(:id=>image_id.to_s)
- @url = @image.temp_file.to_s
- @head_images[@image.sort_number.to_i] = ('')
- end
- result['danger_texts'] = (@form_to_show.danger_texts[locale] rescue '')
- result['title'] = Hash[@head_images.sort].values.join('')
- result['page_title'] = @form_to_show.title_texts[params[:locale]]
- elsif params['get_mapping_data_from_csv'].to_i == 1
- result = {}
- result['mapping_data_from_csv'] = JSON.parse(@form_to_show.mapping_data_from_csv) rescue {}
- else
- @record = Cancerpredictrecord.new
- @record.title = @app_title
- @choice_keys = []
- @choice_values = []
- @choice_names = []
- @form_to_show.form_show.values.each{|choice| @choice_keys.push choice[:variable]}
- @form_to_show.form_show.values.each{|choice| @choice_values.push ((choice[:is_num] == 1) ? [] : choice[:choice_fields])}
- @form_to_show.form_show.values.each{|choice| @choice_names.push choice[:name]}
- @choice_keys.each_with_index{|key,i| @record.names[key] = @choice_names[i]}
- @choice_keys.each_with_index{|key,i| @record.values[key] = @choice_values[i]}
- params['data'].each do |rec_key,rec_value|
- @record.result[rec_key] = rec_value
- end
- @record.submit_time = Time.now.to_s
- @record.save
- locale = params['data']['locale'].to_s rescue 'zh_tw'
- locale = 'zh_tw' if locale == 'zh_cn'
- result = {}
- mapping_data_from_csv = JSON.parse(@form_to_show.mapping_data_from_csv) rescue {}
- @form_to_show.all_variables.each do |v|
- result[v] = 0
- end
- @form_to_show.form_show.each do |num,property|
- @variable = property[:variable]
- if @variable.present?
- if property[:is_num] == 1
- if property[:is_float] == 1
- result[@variable] = params['data'][@variable].to_f rescue 0.0
- else
- result[@variable] = params['data'][@variable].to_i rescue 0
- end
- elsif property[:choice_fields].present?
- if !(@form_to_show.advance_mode)
- result[@variable] = params['data'][@variable].to_i rescue 0
- else
- if property[:need_map_values] == 1
- result[@variable] = property[:map_values][params['data'][@variable].to_i - 1]
- else
- if property[:revert_value] != 1
- result[@variable] = params['data'][@variable].to_i - 1
- else
- result[@variable] = ((property[:choice_fields].length - params['data'][@variable].to_i) rescue params['data'][@variable].to_i)
- end
- end
- end
- end
- if @form_to_show.advance_mode && property[:cancer_predict_mapping_file].present?
- if (mapping_data_from_csv != {})
- mapping_hash = mapping_data_from_csv[@variable]
- temp_index = 0
- temp_value = result[@variable]
- mapping_hash.each_with_index do |(k,v),i|
- if i == 0
- index_val = v.index(temp_value) rescue nil
- if !index_val.nil?
- temp_index = index_val
- else
- closest_value = v.min_by{|x| (temp_value-x).abs}
- temp_index = v.index(closest_value)
- end
- end
- result[k] = v[temp_index]
- end
- end
- end
- end
- end
- formula_variables = @form_to_show.tmp_lpv_variables
- begin
- eval_hidden_variables(result)
- rescue => e
- @form_to_show.generate_eval_formula
- eval_hidden_variables(result)
- end
- begin
- eval_formula(result)
- rescue => e
- @form_to_show.generate_eval_formula
- eval_formula(result)
- end
- result['lpv'] = result[formula_variables.last]
- result['lpv_variable'] = {}
- formula_variables.each do |variable_name|
- result['lpv_variable']["#{variable_name}"] = result[variable_name]
- end
- @years = @form_to_show.years
- result['years'] = @years
- @therapy_choices = [I18n.t('cancerpredict.table.Surgeryonly')]
- @form_to_show.form_show_in_result.values.each{|choice| @therapy_choices.push choice["name"][locale]}
- @therapy_names = @form_to_show.treatment_method
- result['treatment_method'] = @therapy_names
- result['treatment_method_active_indices'] = @form_to_show.treatment_method_active_indices
- result['table'] = @form_to_show.result_table_translations[locale]
- year = params['data']['year'] rescue nil
- if year.nil?
- year = @years.last.to_f
- else
- year = year.to_f
- end
- year_index = @years.index(year)
- @servive_ratio = eval(@form_to_show.tmp_years_settings_for_ruby[year_index])
- @servive_ratio = (@servive_ratio * 100).round(2)
- result['texts'] = @form_to_show.result_text_translations[locale]
- result['extra_therapy_texts'] = @form_to_show.extra_therapy_texts[locale] rescue @form_to_show.extra_therapy_texts['zh_tw']
- result['servive_ratio'] = @servive_ratio
- end
- result = result.merge(params)
- render :json=> result
+ create_first_field
+ if params["header"].to_i == 1
+ locale = params["locale"].to_s rescue "zh_tw"
+ locale = "zh_tw" if locale == "zh_cn"
+ result = {}
+ @head_images = {}
+ @form_to_show.head_images_id.each do |image_id|
+ next if image_id.to_s == ""
+ @image = Headimages.find_by(:id => image_id.to_s)
+ @url = @image.temp_file.to_s
+ @head_images[@image.sort_number.to_i] = ('')
+ end
+ result["head_images"] = Hash[@head_images.sort].values.join("")
+ @head_images = {}
+ @form_to_show.title_images_id.each do |image_id|
+ next if image_id.to_s == ""
+ @image = Headimages.find_by(:id => image_id.to_s)
+ @url = @image.temp_file.to_s
+ @head_images[@image.sort_number.to_i] = ('')
+ end
+ result["danger_texts"] = (@form_to_show.danger_texts[locale] rescue "")
+ result["title"] = Hash[@head_images.sort].values.join("")
+ result["page_title"] = @form_to_show.title_texts[params[:locale]]
+ elsif params["get_mapping_data_from_csv"].to_i == 1
+ result = {}
+ result["mapping_data_from_csv"] = JSON.parse(@form_to_show.mapping_data_from_csv) rescue {}
+ else
+ @record = Cancerpredictrecord.new
+ @record.title = @app_title
+ @choice_keys = []
+ @choice_values = []
+ @choice_names = []
+ @form_to_show.form_show.values.each { |choice| @choice_keys.push choice[:variable] }
+ @form_to_show.form_show.values.each { |choice| @choice_values.push ((choice[:is_num] == 1) ? [] : choice[:choice_fields]) }
+ @form_to_show.form_show.values.each { |choice| @choice_names.push choice[:name] }
+ @choice_keys.each_with_index { |key, i| @record.names[key] = @choice_names[i] }
+ @choice_keys.each_with_index { |key, i| @record.values[key] = @choice_values[i] }
+ params["data"].each do |rec_key, rec_value|
+ @record.result[rec_key] = rec_value
+ end
+ @record.submit_time = Time.now.to_s
+ @record.save
+ locale = params["data"]["locale"].to_s rescue "zh_tw"
+ locale = "zh_tw" if locale == "zh_cn"
+ result = {}
+ mapping_data_from_csv = JSON.parse(@form_to_show.mapping_data_from_csv) rescue {}
+ @form_to_show.all_variables.each do |v|
+ result[v] = 0
+ end
+ @form_to_show.form_show.each do |num, property|
+ @variable = property[:variable]
+ if @variable.present?
+ if property[:is_num] == 1
+ if property[:is_float] == 1
+ result[@variable] = params["data"][@variable].to_f rescue 0.0
+ else
+ result[@variable] = params["data"][@variable].to_i rescue 0
+ end
+ elsif property[:choice_fields].present?
+ if !(@form_to_show.advance_mode)
+ result[@variable] = params["data"][@variable].to_i rescue 0
+ else
+ if property[:need_map_values] == 1
+ result[@variable] = property[:map_values][params["data"][@variable].to_i - 1]
+ else
+ if property[:revert_value] != 1
+ result[@variable] = params["data"][@variable].to_i - 1
+ else
+ result[@variable] = ((property[:choice_fields].length - params["data"][@variable].to_i) rescue params["data"][@variable].to_i)
+ end
+ end
+ end
+ end
+ if @form_to_show.advance_mode && property[:cancer_predict_mapping_file].present?
+ if (mapping_data_from_csv != {})
+ mapping_hash = mapping_data_from_csv[@variable]
+ temp_index = 0
+ temp_value = result[@variable]
+ mapping_hash.each_with_index do |(k, v), i|
+ if i == 0
+ index_val = v.index(temp_value) rescue nil
+ if !index_val.nil?
+ temp_index = index_val
+ else
+ closest_value = v.min_by { |x| (temp_value - x).abs }
+ temp_index = v.index(closest_value)
+ end
+ end
+ result[k] = v[temp_index]
+ end
+ end
+ end
+ end
+ end
+ formula_variables = @form_to_show.tmp_lpv_variables
+ begin
+ eval_hidden_variables(result)
+ rescue => e
+ @form_to_show.generate_eval_formula
+ eval_hidden_variables(result)
+ end
+ begin
+ eval_formula(result)
+ rescue => e
+ @form_to_show.generate_eval_formula
+ eval_formula(result)
+ end
+ result["lpv"] = result[formula_variables.last]
+ result["lpv_variable"] = {}
+ formula_variables.each do |variable_name|
+ result["lpv_variable"]["#{variable_name}"] = result[variable_name]
+ end
+ @years = @form_to_show.years
+ result["years"] = @years
+ @therapy_choices = [I18n.t("cancerpredict.table.Surgeryonly")]
+ @form_to_show.form_show_in_result.values.each { |choice| @therapy_choices.push choice["name"][locale] }
+ @therapy_names = @form_to_show.treatment_method
+ result["treatment_method"] = @therapy_names
+ result["treatment_method_active_indices"] = @form_to_show.treatment_method_active_indices
+ result["table"] = @form_to_show.result_table_translations[locale]
+ year = params["data"]["year"] rescue nil
+ if year.nil?
+ year = @years.last.to_f
+ else
+ year = year.to_f
+ end
+ year_index = @years.index(year)
+ @servive_ratio = eval(@form_to_show.tmp_years_settings_for_ruby[year_index])
+ @servive_ratio = (@servive_ratio * 100).round(2)
+ result["texts"] = @form_to_show.result_text_translations[locale]
+ result["extra_therapy_texts"] = @form_to_show.extra_therapy_texts[locale] rescue @form_to_show.extra_therapy_texts["zh_tw"]
+ result["servive_ratio"] = @servive_ratio
+ end
+ result = result.merge(params)
+ render :json => result
end
+
def index
- uid = OrbitHelper.params[:uid] rescue ""
- tags = OrbitHelper.widget_tags
- categories = OrbitHelper.widget_categories || []
- @table_str = File.read("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt")
- preidct_js_url = '/assets/cancer_predict.js'
- if File.exist?(Cancerpredictfields::JSFileName)
- js_filename = File.read(Cancerpredictfields::JSFileName)
- if js_filename.include?('cancer_predict.js')
- asset = Rails.application.assets[js_filename]
- preidct_js_url = "#{Rails.application.config.assets.prefix}/#{asset.digest_path}"
- else
- preidct_js_url = "#{Rails.application.config.assets.prefix}/#{File.basename(js_filename)}"
- end
- end
- {
- "cancerpredict" => [],
- "extras"=>{"table"=> @table_str,'preidct_js_url'=>preidct_js_url}
- }
+ uid = OrbitHelper.params[:uid] rescue ""
+ tags = OrbitHelper.widget_tags
+ categories = OrbitHelper.widget_categories || []
+ @table_str = File.read("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt")
+ preidct_js_url = "/assets/cancer_predict.js"
+ if File.exist?(Cancerpredictfields::JSFileName)
+ js_filename = File.read(Cancerpredictfields::JSFileName)
+ if js_filename.include?("cancer_predict.js")
+ asset = Rails.application.assets[js_filename]
+ preidct_js_url = "#{Rails.application.config.assets.prefix}/#{asset.digest_path}"
+ else
+ preidct_js_url = "#{Rails.application.config.assets.prefix}/#{File.basename(js_filename)}"
+ end
+ end
+ {
+ "cancerpredict" => [],
+ "extras" => { "table" => @table_str, "preidct_js_url" => preidct_js_url },
+ }
end
+
def widget
- uid = OrbitHelper.params[:uid] rescue ""
- tags = OrbitHelper.widget_tags
- categories = OrbitHelper.widget_categories || []
- @table_str = File.read("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt")
- preidct_js_url = '/assets/cancer_predict.js'
- if File.exist?(Cancerpredictfields::JSFileName)
- js_filename = File.read(Cancerpredictfields::JSFileName)
- if js_filename.include?('cancer_predict.js')
- asset = Rails.application.assets[js_filename]
- preidct_js_url = "#{Rails.application.config.assets.prefix}/#{asset.digest_path}"
- else
- preidct_js_url = "#{Rails.application.config.assets.prefix}/#{File.basename(js_filename)}"
- end
- end
- {
- "cancerpredict" => [],
- "extras"=>{"table"=> @table_str,'preidct_js_url'=>preidct_js_url}
- }
+ uid = OrbitHelper.params[:uid] rescue ""
+ tags = OrbitHelper.widget_tags
+ categories = OrbitHelper.widget_categories || []
+ @table_str = File.read("#{Cancerpredictfields::ToolTablePrefix}#{I18n.locale}.txt")
+ preidct_js_url = "/assets/cancer_predict.js"
+ if File.exist?(Cancerpredictfields::JSFileName)
+ js_filename = File.read(Cancerpredictfields::JSFileName)
+ if js_filename.include?("cancer_predict.js")
+ asset = Rails.application.assets[js_filename]
+ preidct_js_url = "#{Rails.application.config.assets.prefix}/#{asset.digest_path}"
+ else
+ preidct_js_url = "#{Rails.application.config.assets.prefix}/#{File.basename(js_filename)}"
+ end
+ end
+ {
+ "cancerpredict" => [],
+ "extras" => { "table" => @table_str, "preidct_js_url" => preidct_js_url },
+ }
end
+
def create_first_field
- if Cancerpredictfields.where("title"=>(@app_title + "_back")).count == 0
- @form_to_show = Cancerpredictfields.new()
- @form_to_show.title = @app_title +"_back"
- @form_to_show.save
- end
- @form_to_show
- if Cancerpredictfields.where("title"=>@app_title).count == 0
- @form_to_show = Cancerpredictfields.new()
- @form_to_show.title=@app_title
- @form_to_show.save
- @form_to_show = Cancerpredictfields.where("title"=>@app_title).first
- else
- @form_to_show = Cancerpredictfields.where("title"=>@app_title).first
- end
+ if Cancerpredictfields.where("title" => (@app_title + "_back")).count == 0
+ @form_to_show = Cancerpredictfields.new()
+ @form_to_show.title = @app_title + "_back"
+ @form_to_show.save
+ end
+ @form_to_show
+ if Cancerpredictfields.where("title" => @app_title).count == 0
+ @form_to_show = Cancerpredictfields.new()
+ @form_to_show.title = @app_title
+ @form_to_show.save
+ @form_to_show = Cancerpredictfields.where("title" => @app_title).first
+ else
+ @form_to_show = Cancerpredictfields.where("title" => @app_title).first
+ end
end
+
def read_mapping_file(mapping_file)
- if mapping_file.class != CancerPredictMappingFile
- mapping_file = CancerPredictMappingFile.find(mapping_file_id) rescue nil
- end
- if !mapping_file.nil?
- csv_rows = CSV.read(mapping_file.temp_file.file.path)
- titles = csv_rows[0]
- infos = {}
- titles.each_with_index do |title,i|
- infos[title] = []
- csv_rows[1..-1].each do |row|
- infos[title] << row[i].to_f
- end
- end
- return infos
- else
- return {}
- end
+ if mapping_file.class != CancerPredictMappingFile
+ mapping_file = CancerPredictMappingFile.find(mapping_file_id) rescue nil
+ end
+ if !mapping_file.nil?
+ csv_rows = CSV.read(mapping_file.temp_file.file.path)
+ titles = csv_rows[0]
+ infos = {}
+ titles.each_with_index do |title, i|
+ infos[title] = []
+ csv_rows[1..-1].each do |row|
+ infos[title] << row[i].to_f
+ end
+ end
+ return infos
+ else
+ return {}
+ end
end
-end
\ No newline at end of file
+end