cancer_predict/app/controllers/admin/cancerpredicts_controller.rb

719 lines
42 KiB
Ruby
Raw Normal View History

2019-11-15 00:44:28 +00:00
# encoding: utf-8
class Admin::CancerpredictsController < OrbitAdminController
2024-08-23 13:08:20 +00:00
require "spreadsheet"
require "rubyXL"
require "fileutils"
2020-02-03 07:27:29 +00:00
require "axlsx"
require "csv"
2020-02-03 08:47:49 +00:00
#include Admin::CancerpredictsHelper
2019-11-15 00:44:28 +00:00
before_action ->(module_app = @app_title) { set_variables module_app }
2019-11-23 03:15:11 +00:00
before_action :create_first_field
2020-02-03 08:47:49 +00:00
helper Admin::CancerpredictsHelper
2019-11-15 00:44:28 +00:00
#before_action :load_access_levels
def initialize
super
@app_title = "cancerpredict"
end
2024-08-23 13:08:20 +00:00
2024-08-21 15:11:17 +00:00
def yaml_load(v)
2024-08-23 13:08:20 +00:00
YAML.load(v)
2024-08-21 15:11:17 +00:00
end
2024-08-23 13:08:20 +00:00
2019-11-15 00:44:28 +00:00
def index
2024-08-23 13:08:20 +00:00
@tags = @module_app.tags
2019-11-15 00:44:28 +00:00
@categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories, @tags)
@table_fields = [:status, :category, :title, :start_date, :end_date, :last_modified]
2024-08-23 13:08:20 +00:00
@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)
2019-11-15 00:44:28 +00:00
end
2024-08-23 13:08:20 +00:00
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
2024-08-23 13:17:27 +00:00
@site_locales = Site.last.in_use_locales.each do |locale|
I18n.with_locale(locale) do
File.open(Cancerpredictfields::ToolTableMap[I18n.locale], "w") do |f|
tmp_table_texts = create_table(locale)
f.write(tmp_table_texts)
end
end
end
idx = 0
while File.exist?("public/cancerfield_back#{idx}.txt")
idx += 1
2024-08-23 13:08:20 +00:00
end
2024-08-23 13:17:27 +00:00
File.open("public/cancerfield_back#{idx}.txt", "w") do |f|
f.write(@form_to_show.attributes)
2024-08-23 13:08:20 +00:00
end
2024-08-23 13:17:27 +00:00
File.open("public/cancerfield_org#{idx}.txt", "w") do |f|
f.write(Cancerpredictfields.where("title" => @app_title + "_back").first.attributes)
2024-08-23 13:08:20 +00:00
end
redirect_to admin_cancerpredicts_path
end
2024-08-23 13:08:20 +00:00
2020-01-28 10:24:52 +00:00
def create_table(current_locale)
2024-08-23 13:08:20 +00:00
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.to_s.titleize + "</button>"
@table_str_left += '<input type="hidden" value="0" name="' + create_choice.to_s + '"/>'
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.to_s.titleize + "</button>"
@table_str_right += '<input type="hidden" value="0" name="' + create_choice.to_s + '"/>'
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.to_s.titleize + "</button>"
@table_result_choice_fileds += '<input type="hidden" value="0" name="' + create_choice.to_s + '"></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
2020-01-28 10:24:52 +00:00
end
2024-08-23 13:08:20 +00:00
def showSubmit
2024-08-23 13:08:20 +00:00
@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)
2020-02-03 08:47:49 +00:00
end
2024-08-23 13:08:20 +00:00
2020-02-03 08:47:49 +00:00
def export_cancer_tool_record
2024-08-23 13:08:20 +00:00
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")
2024-08-23 13:17:27 +00:00
File.open("#{dir_path}#{@filename}", "w") do |f|
f.write render_to_string(:handlers => [:axlsx], :formats => [:xlsx], :partial => "export_cancer_tool_record.xlsx", :locals => { :results => cancer_records })
2024-08-23 13:08:20 +00:00
end
2024-08-23 13:17:27 +00:00
tmp_filename_data = File.read("#{dir_path}#{@filename}")
2024-08-23 13:08:20 +00:00
send_data(tmp_filename_data, type: "application/xlsx", disposition: "attachment", filename: @filename)
2019-11-23 08:14:56 +00:00
end
2024-08-23 13:08:20 +00:00
2019-11-23 03:15:11 +00:00
def create_first_field
2024-08-23 13:08:20 +00:00
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
2024-08-23 13:17:27 +00:00
@site_locales = Site.last.in_use_locales.each do |locale|
File.open(Cancerpredictfields::ToolTableMap[I18n.locale], "w") do |f|
tmp_table_texts = create_table(locale)
f.write(tmp_table_texts)
end
end
2024-08-23 13:08:20 +00:00
else
@form_to_show = Cancerpredictfields.where("title" => @app_title).first
end
2019-11-23 08:14:56 +00:00
end
2024-08-23 13:08:20 +00:00
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>")
2020-02-03 08:47:49 +00:00
end
2024-08-23 13:08:20 +00:00
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