718 lines
38 KiB
Ruby
718 lines
38 KiB
Ruby
# encoding: utf-8
|
|
class Admin::CancerpredictsController < OrbitAdminController
|
|
require 'spreadsheet'
|
|
require 'rubyXL'
|
|
require 'fileutils'
|
|
require "axlsx"
|
|
require "csv"
|
|
#include Admin::CancerpredictsHelper
|
|
before_action ->(module_app = @app_title) { set_variables module_app }
|
|
before_action :create_first_field
|
|
helper Admin::CancerpredictsHelper
|
|
#before_action :load_access_levels
|
|
def initialize
|
|
super
|
|
@app_title = "cancerpredict"
|
|
end
|
|
def index
|
|
@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)
|
|
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"] != nil && 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"] != nil && 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])
|
|
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]}
|
|
@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('cancer_tool_table_tmp_'+locale.to_s+'.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 = '<div id="cancer_table" style="font-size:' + @size_active_size + ';"><div id="show_help_modal" class="modal fade"></div>'
|
|
@table_str += '<div id="cancer_table_top"><div id="text_describe">'+@form_to_show.text_descibe[current_locale] +'</div>'
|
|
@table_str += '<div id="font_size_choices">'+'<label id="font_texts">'+t('cancerpredict.font_size').titleize+':</label>'
|
|
@size.each{|size_key,size_value| @table_str += ('<button class="cancer_table_btn '+((@form_to_show[size_key]['active'].to_i == 1) ? 'active' :'') + ' btn btn-default btn-sm" onclick="document.getElementById(\'cancer_table\').style[\'font-size\']=\''+size_value+'\';document.getElementById(\'cancer_predict_result_block\').style[\'font-size\']=\''+size_value+'\';">'+t('cancerpredict.'+size_key).titleize+'</button>' )}
|
|
@table_str += '</div></div><div style="clear:both;"></div>'
|
|
@table_str_left = '<div id="cancer_table_left">'
|
|
@table_str_right = '<div id="cancer_table_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 += '<div data-key='+num.to_s+'>'
|
|
@table_str_left += '<label for="'+@field_property["variable"]+'" style="float:left;'+(@field_property["comment_text"] == "" ? "margin-right: 2.125em;" : "")+'" class="cencer_table_name">'
|
|
@table_str_left += @field_property["name"]
|
|
@table_str_left += '</label>'
|
|
if @field_property["comment_text"].present?
|
|
@table_str_left += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_str_left += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'/>'
|
|
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 += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_str_left += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'/>'
|
|
else
|
|
@table_str_left += '<div style="margin-right: 2.125em;float: left;"></div>'
|
|
end
|
|
end
|
|
if @field_property["is_num"] == 1
|
|
if @field_property["is_float"] == 1
|
|
@table_str_left += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/><input class="num_only_value" type="hidden" /></div>'
|
|
else
|
|
if @field_property["range"] == []
|
|
@table_str_left += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/></div>'
|
|
else
|
|
@table_str_left += '<div class="num_group"><form class="for_num">'
|
|
@table_str_left += '<input class="num_only cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'" onkeyup="value=value.replace(/[^\d]/g,\'\') "onbeforepaste="clipboardData.setData(\'text\',clipboardData.getData(\'text\').replace(/[^\d]/g,\'\'))"/>'
|
|
@table_str_left += '<input class="num_only_value" type="hidden" value="0"/>'
|
|
@please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice"
|
|
@table_str_left += '<select class="select_num"><option value="">'+@please_choice+'</option>'
|
|
if @field_property["choice_fields"] != []
|
|
@field_property["choice_fields"].each do |choice|
|
|
@table_str_left += ('<option value="0">' + choice.to_s.titleize + '</option>')
|
|
end
|
|
end
|
|
for @num in @field_property["range"][0] .. @field_property["range"][1]
|
|
@table_str_left += ('<option value="' + @num.to_s + '">' + @num.to_s + '</option>')
|
|
end
|
|
@table_str_left += '</select></form></div>'
|
|
end
|
|
end
|
|
else
|
|
@table_str_left += '<div class= "cancer-btn-group cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;">'
|
|
@field_property["choice_fields"].each do |create_choice|
|
|
@table_str_left += '<button class="cancer_table_btn btn btn-default btn-sm">'+create_choice.titleize+'</button>'
|
|
@table_str_left += '<input type="hidden" value="0" name="'+create_choice+'"/>'
|
|
end
|
|
@table_str_left += '</div>'
|
|
end
|
|
if @field_property["hint"].to_s != ""
|
|
@table_str_left +='<div style="color: rgb(104, 104, 104);font-size:0.75em;clear:both;">'+@field_property["hint"]+'</div>'
|
|
end
|
|
@table_str_left += '</div><div style="clear:both;"></div>'
|
|
else
|
|
@table_str_right += '<div data-key='+num.to_s+'>'
|
|
break if @field_property["name"] == ""
|
|
@table_str_right += '<label for="'+@field_property["variable"]+'" style="float:left;'+(@field_property["comment_text"] == "" ? "margin-right: 2.125em;" : "")+'" class="cencer_table_name">'
|
|
@table_str_right += @field_property["name"]
|
|
@table_str_right += '</label>'
|
|
if @field_property["comment_text"].present?
|
|
@table_str_right += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_str_right += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'/>'
|
|
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 += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_str_right += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'/>'
|
|
else
|
|
@table_str_right += '<div style="margin-right: 2.125em;float: left;"></div>'
|
|
end
|
|
end
|
|
if @field_property["is_num"] == 1
|
|
if @field_property["is_float"] == 1
|
|
@table_str_right += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/><input class="num_only_value" type="hidden" /></div>'
|
|
else
|
|
if @field_property["range"] == []
|
|
@table_str_left += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/></div>'
|
|
else
|
|
@table_str_right += '<div class="num_group"><form class="for_num">'
|
|
@table_str_right += '<input class="num_only cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'" onkeyup="value=value.replace(/[^\d]/g,\'\') "onbeforepaste="clipboardData.setData(\'text\',clipboardData.getData(\'text\').replace(/[^\d]/g,\'\'))"/>'
|
|
@table_str_right += '<input class="num_only_value" type="hidden" value="0"/>'
|
|
@please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice"
|
|
@table_str_right += '<select class="select_num"><option value="">'+@please_choice+'</option>'
|
|
if @field_property["choice_fields"] != []
|
|
@field_property["choice_fields"].each do |choice|
|
|
@table_str_right += ('<option value="0">' + choice.to_s.titleize + '</option>')
|
|
end
|
|
end
|
|
for @num in @field_property["range"][0] .. @field_property["range"][1]
|
|
@table_str_right += ('<option value="' + @num.to_s + '">' + @num.to_s + '</option>')
|
|
end
|
|
@table_str_right += '</select></form></div>'
|
|
end
|
|
end
|
|
else
|
|
@table_str_right += '<div class= "cancer-btn-group cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;">'
|
|
@field_property["choice_fields"].each do |create_choice|
|
|
@table_str_right += '<button class="cancer_table_btn btn btn-default btn-sm">'+create_choice.titleize+'</button>'
|
|
@table_str_right += '<input type="hidden" value="0" name="'+create_choice+'"/>'
|
|
end
|
|
@table_str_right += '</div>'
|
|
end
|
|
if @field_property["hint"].to_s != ""
|
|
@table_str_right +='<div class="hint-texts">'+@field_property["hint"]+'</div>'
|
|
end
|
|
@table_str_right += '</div><div style="clear:both;"></div>'
|
|
end
|
|
end
|
|
@table_str_left += '</div>'
|
|
@table_str_right += '</div>'
|
|
@table_str += (@table_str_left+@table_str_right)
|
|
@table_str +='<div style="clear:both;"></div>'
|
|
@table_result_str = '<div id="cancer_predict_result" style="'+((@form_to_show.form_result_is_right == 0) ? 'float:right;' : '')+'"><span class="result_title">'+t("cancerpredict.table.result").to_s+'</span><div style="clear:both;"></div>'
|
|
@tab_name = ['table','text']
|
|
@table_result_str +='<div class="texts_under_result">' + @form_to_show.texts_between_Result_and_result_block[current_locale]+'</div>'
|
|
@table_result_str += '<div id="result_contents"><div class="result_tab_group">'
|
|
@tab_name.each_with_index{|name,index| @table_result_str += ('<div id="result_'+name+'_tab" class="result_tab'+((index != 0) ? "" : " active")+'"><a>'+t("cancerpredict.table."+name).to_s+'</a></div><div style="clear:both;"></div>')}
|
|
@table_result_str += '</div><div class="result_content_group">'
|
|
@tab_name.each{|name| @table_result_str += '<div id="result_'+name+'_content" class="result_content"><a>'+'no content'+'</a></div>'}
|
|
@table_result_str += '</div></div></div>'
|
|
@table_button = '<div id="cancer_table_button_group">'
|
|
@submit_btn_str='<button id="cancer_table_submit">'+t('cancerpredict.table.Submit').to_s+'</button>'
|
|
@reset_btn_str='<button id="cancer_table_reset">'+t('cancerpredict.table.Reset').to_s+'</button>'
|
|
@table_button += (@submit_btn_str+@reset_btn_str+'<div style="clear:both;"></div></div></div>')
|
|
@table_result_choice_fileds = '<div id="cancer_table_right_result">' if @form_to_show.form_result_is_right == 1
|
|
@table_result_choice_fileds = '<div id="cancer_table_left_result">' if @form_to_show.form_result_is_right == 0
|
|
@table_result_choice_fileds += '<span class="result_title">'+t('cancerpredict.table.Therapy_choice').to_s+'</span><div style="clear:both;"></div>'
|
|
@table_result_choice_fileds += '<div id="choice_fields">'
|
|
@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 += '<div data-key='+num.to_s+'>'
|
|
break if @field_property["name"] == ""
|
|
@table_result_choice_fileds += '<label for="'+@field_property["variable"]+'" style="float:left;'+(@field_property["comment_text"] == "" ? "margin-right: 2.125em;" : "")+'" class="cencer_table_name">'
|
|
@table_result_choice_fileds += @field_property["name"]
|
|
@table_result_choice_fileds += '</label>'
|
|
if @field_property["comment_text"].present?
|
|
@table_result_choice_fileds += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_result_choice_fileds += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'></input>'
|
|
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 += '<button tabindex="0" class="cancer_help_btn" data-target="#show_help_modal" style="float:left;cursor: pointer;padding: 0em 0.475em;font-size: 1.25em;border-radius: 15px;background-color: rgb(210, 106, 2);border-color: rgb(210, 106, 2);color: white;"><i aria-hidden="true" class="fa fa-question"></i></button>'
|
|
@table_result_choice_fileds += '<input class="help_texts" type="hidden" value="'+@field_property["comment_text"]+'" name='+@field_property["variable"]+'/>'
|
|
else
|
|
@table_result_choice_fileds += '<div style="margin-right: 2.125em;float: left;"></div>'
|
|
end
|
|
end
|
|
if @field_property["is_num"] == 1
|
|
if @field_property["is_float"] == 1
|
|
@table_result_choice_fileds += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/><input class="num_only_value" type="hidden" /></button>'
|
|
else
|
|
if @field_property["range"] == []
|
|
@table_str_left += '<div class="num_group"><input class="num_only float_num cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'"/></div>'
|
|
else
|
|
@table_result_choice_fileds += '<div class="num_group"><form class="for_num">'
|
|
@table_result_choice_fileds += '<input class="num_only cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;" data-range="'+@field_property["range"].to_s+'" onkeyup="value=value.replace(/[^\d]/g,\'\') "onbeforepaste="clipboardData.setData(\'text\',clipboardData.getData(\'text\').replace(/[^\d]/g,\'\'))"/><button class="btn-sub"></button><button class="btn-add"></button></div>'
|
|
@table_str_left += '<input class="num_only_value" type="hidden" value="0"/>'
|
|
@please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice"
|
|
@table_result_choice_fileds += '<select class="select_num"><option value="">'+@please_choice+'</option>'
|
|
if @field_property["choice_fields"] != []
|
|
@field_property["choice_fields"].each do |choice|
|
|
@table_result_choice_fileds += ('<option value="0">' + choice.to_s.titleize + '</option>')
|
|
end
|
|
end
|
|
for @num in @field_property["range"][0] .. @field_property["range"][1]
|
|
@table_result_choice_fileds += ('<option value="' + @num.to_s + '">' + @num.to_s + '</option>')
|
|
end
|
|
@table_result_choice_fileds += '</select></form></div>'
|
|
end
|
|
end
|
|
else
|
|
@table_result_choice_fileds += '<div class= "cancer-btn-group cancer_form_field" id="'+@field_property["variable"]+'" style="float:left;clear:right;">'
|
|
@field_property["choice_fields"].each do |create_choice|
|
|
@table_result_choice_fileds += '<button class="cancer_table_btn btn btn-default btn-sm">'+create_choice.titleize+'</button>'
|
|
@table_result_choice_fileds += '<input type="hidden" value="0" name="'+create_choice+'"></input>'
|
|
end
|
|
@table_result_choice_fileds += '</div>'
|
|
end
|
|
if @field_property["hint"].to_s != ""
|
|
@table_result_choice_fileds +='<div class="hint-texts">'+@field_property["hint"]+'</div>'
|
|
end
|
|
@table_result_choice_fileds += '</div><div style="clear:both;"></div>'
|
|
end
|
|
@table_result_choice_fileds += '</div></div>'
|
|
@table_str += (@table_button+'<div id="cancer_predict_result_block" style="font-size:' + @size_active_size + ';">'+@table_result_str+@table_result_choice_fileds+'</div>'+'<div style="clear:both;"></div>')
|
|
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)
|
|
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)
|
|
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('cancer_tool_table_tmp_'+locale.to_s+'.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 = '<div class="PageDetails">'+((I18n.locale.to_s == 'zh_tw') ? "第 #{page} 頁" : "page #{page}") +'/'+ ((I18n.locale.to_s == 'zh_tw') ? "共 #{all_page_num} 頁" : "Total #{all_page_num} page(s)")+'<ol class="PageList">'+
|
|
((page == 1) ? '<li>['+I18n.t('cancerpredict.prev_page')+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+(page-1).to_s+'"> ['+I18n.t('cancerpredict.prev_page')+'] </a></li>')
|
|
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) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
else
|
|
(1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
pagination +='<li>...</li>'
|
|
(page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
end
|
|
(page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
pagination +='<li>...</li>'
|
|
(all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
else
|
|
(1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
pagination +='<li>...</li>'
|
|
(page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
if all_page_num - page <= 7
|
|
(page+1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
else
|
|
(page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
pagination +='<li>...</li>'
|
|
(all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
end
|
|
end
|
|
else
|
|
(1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '<li>['+page_num.to_s+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+page_num.to_s+'"> '+page_num.to_s+' </a></li>')}
|
|
end
|
|
pagination += (((page==all_page_num) ? '<li>['+I18n.t('cancerpredict.next_page')+']</li>' : '<li><a href="'+(extra_params.blank? ? '?' : "?#{extra_params}&")+'page='+(page+1).to_s+'"> ['+I18n.t('cancerpredict.next_page')+'] </a></li>')+'</ol></div>')
|
|
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 |