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 += '
' - @table_str_left += '' - @table_str_left += '' - @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice" - @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 += '
' - @table_str_right += '' - @table_str_right += '' - @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice" - @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 = '
' - @submit_btn_str='' - @reset_btn_str='' - @table_button += (@submit_btn_str+@reset_btn_str+'
') - @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_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 += '
' + @table_str_left += '' + @table_str_left += '' + @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice" + @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 += '
' + @table_str_right += '' + @table_str_right += '' + @please_choice = (current_locale.to_s == "zh_tw") ? "請選擇" : "Please choice" + @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 = '
' + @submit_btn_str = '" + @reset_btn_str = '" + @table_button += (@submit_btn_str + @reset_btn_str + '
') + @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_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) ? '
  1. ['+I18n.t('cancerpredict.prev_page')+']
  2. ' : '
  3. ['+I18n.t('cancerpredict.prev_page')+']
  4. ') - 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) ? '
  5. ['+page_num.to_s+']
  6. ' : '
  7. '+page_num.to_s+'
  8. ')} - else - (1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '
  9. ['+page_num.to_s+']
  10. ' : '
  11. '+page_num.to_s+'
  12. ')} - pagination +='
  13. ...
  14. ' - (page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '
  15. ['+page_num.to_s+']
  16. ' : '
  17. '+page_num.to_s+'
  18. ')} - end - (page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '
  19. ['+page_num.to_s+']
  20. ' : '
  21. '+page_num.to_s+'
  22. ')} - pagination +='
  23. ...
  24. ' - (all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '
  25. ['+page_num.to_s+']
  26. ' : '
  27. '+page_num.to_s+'
  28. ')} - else - (1..3).to_a.each{|page_num| pagination += ((page_num == page) ? '
  29. ['+page_num.to_s+']
  30. ' : '
  31. '+page_num.to_s+'
  32. ')} - pagination +='
  33. ...
  34. ' - (page-3..page).to_a.each{|page_num| pagination += ((page_num == page) ? '
  35. ['+page_num.to_s+']
  36. ' : '
  37. '+page_num.to_s+'
  38. ')} - if all_page_num - page <= 7 - (page+1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '
  39. ['+page_num.to_s+']
  40. ' : '
  41. '+page_num.to_s+'
  42. ')} - else - (page+1..page+3).to_a.each{|page_num| pagination += ((page_num == page) ? '
  43. ['+page_num.to_s+']
  44. ' : '
  45. '+page_num.to_s+'
  46. ')} - pagination +='
  47. ...
  48. ' - (all_page_num-2..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '
  49. ['+page_num.to_s+']
  50. ' : '
  51. '+page_num.to_s+'
  52. ')} - end - end - else - (1..all_page_num).to_a.each{|page_num| pagination += ((page_num == page) ? '
  53. ['+page_num.to_s+']
  54. ' : '
  55. '+page_num.to_s+'
  56. ')} - end - pagination += (((page==all_page_num) ? '
  57. ['+I18n.t('cancerpredict.next_page')+']
  58. ' : '
  59. ['+I18n.t('cancerpredict.next_page')+']
  60. ')+'
') + + 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) ? "
  1. [" + I18n.t("cancerpredict.prev_page") + "]
  2. " : '
  3. [' + I18n.t("cancerpredict.prev_page") + "]
  4. ") + 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) ? "
  5. [" + page_num.to_s + "]
  6. " : '
  7. ' + page_num.to_s + "
  8. ") } + else + (1..3).to_a.each { |page_num| pagination += ((page_num == page) ? "
  9. [" + page_num.to_s + "]
  10. " : '
  11. ' + page_num.to_s + "
  12. ") } + pagination += "
  13. ...
  14. " + (page - 3..page).to_a.each { |page_num| pagination += ((page_num == page) ? "
  15. [" + page_num.to_s + "]
  16. " : '
  17. ' + page_num.to_s + "
  18. ") } + end + (page + 1..page + 3).to_a.each { |page_num| pagination += ((page_num == page) ? "
  19. [" + page_num.to_s + "]
  20. " : '
  21. ' + page_num.to_s + "
  22. ") } + pagination += "
  23. ...
  24. " + (all_page_num - 2..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "
  25. [" + page_num.to_s + "]
  26. " : '
  27. ' + page_num.to_s + "
  28. ") } + else + (1..3).to_a.each { |page_num| pagination += ((page_num == page) ? "
  29. [" + page_num.to_s + "]
  30. " : '
  31. ' + page_num.to_s + "
  32. ") } + pagination += "
  33. ...
  34. " + (page - 3..page).to_a.each { |page_num| pagination += ((page_num == page) ? "
  35. [" + page_num.to_s + "]
  36. " : '
  37. ' + page_num.to_s + "
  38. ") } + if all_page_num - page <= 7 + (page + 1..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "
  39. [" + page_num.to_s + "]
  40. " : '
  41. ' + page_num.to_s + "
  42. ") } + else + (page + 1..page + 3).to_a.each { |page_num| pagination += ((page_num == page) ? "
  43. [" + page_num.to_s + "]
  44. " : '
  45. ' + page_num.to_s + "
  46. ") } + pagination += "
  47. ...
  48. " + (all_page_num - 2..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "
  49. [" + page_num.to_s + "]
  50. " : '
  51. ' + page_num.to_s + "
  52. ") } + end + end + else + (1..all_page_num).to_a.each { |page_num| pagination += ((page_num == page) ? "
  53. [" + page_num.to_s + "]
  54. " : '
  55. ' + page_num.to_s + "
  56. ") } + end + pagination += (((page == all_page_num) ? "
  57. [" + I18n.t("cancerpredict.next_page") + "]
  58. " : '
  59. [' + I18n.t("cancerpredict.next_page") + "]
  60. ") + "
") 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