added validations to controllers (file too big, names too big), some javascript error messagges, and fixed some nil exceptions in controllers appending nil strings to descriptions

This commit is contained in:
Zanz2 2017-09-22 11:56:50 +02:00
parent 1dbb03e22d
commit deef790951
5 changed files with 102 additions and 43 deletions

View file

@ -606,9 +606,20 @@ class ProtocolsController < ApplicationController
# #
#tule #tule
def protocolsio_import_create def protocolsio_import_create
@protocolsio_too_big=false
file_size=(File.size(params[:json_file].path))
if(file_size/1000>Constants::FILE_MAX_SIZE_MB)
@protocolsio_too_big=true
respond_to do |format|
format.js {}
end
else
@protocolsio_too_big=false
end
json_file_contents=File.read(params[:json_file].path) json_file_contents=File.read(params[:json_file].path)
json_file_contents.gsub! '\"', "'" json_file_contents.gsub! '\"', "'"
@ -632,7 +643,7 @@ def protocolsio_import_save
# will have to fit various things in here (guidelines, manuscript citations etc etc) # will have to fit various things in here (guidelines, manuscript citations etc etc)
#"before_start","warning","guidelines","manuscript_citation","publish_date","created_on" #"before_start","warning","guidelines","manuscript_citation","publish_date","created_on"
#"vendor_name","vendor_link","keywords","tags" #"vendor_name","vendor_link","keywords","tags"
description_array = [ "before_start","warning","guidelines","manuscript_citation","publish_date","created_on","vendor_name","vendor_link","keywords","tags" ] description_array = [ "before_start","warning","guidelines","manuscript_citation","publish_date","created_on","vendor_name","vendor_link","keywords","tags","link" ]
description_string=params["protocol"]["description"] description_string=params["protocol"]["description"]
#@import_object["description"]=params["protocol"]["description"] #@import_object["description"]=params["protocol"]["description"]
description_array.each do |element| description_array.each do |element|
@ -640,16 +651,16 @@ def protocolsio_import_save
if(@json_object[element]&&@json_object[element]!="") if(@json_object[element]&&@json_object[element]!="")
new_element = element.slice(0,1).capitalize + element.slice(1..-1) new_element = element.slice(0,1).capitalize + element.slice(1..-1)
new_element= new_element.gsub("_"," ") new_element= new_element.gsub("_"," ")
description_string=description_string+new_element.to_s+": "+params["protocol"]["created_at"].to_s+"\n" description_string=description_string+new_element.to_s+": "+Sanitize.clean(params["protocol"]["created_at"].to_s)+"\n"
end end
else else
if(element=="tags") if(element=="tags")
if(@json_object[element]&&@json_object[element]!="") if(@json_object[element].any?&&@json_object[element]!="")
new_element = element.slice(0,1).capitalize + element.slice(1..-1) new_element = element.slice(0,1).capitalize + element.slice(1..-1)
new_element= new_element.gsub("_"," ") new_element= new_element.gsub("_"," ")
description_string=description_string+new_element.to_s+": " description_string=description_string+new_element.to_s+": "
@json_object[element].each do |tag| @json_object[element].each do |tag|
description_string=description_string+tag["tag_name"]+" , " description_string=description_string+Sanitize.clean(tag["tag_name"])+" , "
end end
description_string=description_string+"\n" description_string=description_string+"\n"
end end
@ -658,7 +669,7 @@ def protocolsio_import_save
if(@json_object[element]&&@json_object[element]!="") if(@json_object[element]&&@json_object[element]!="")
new_element = element.slice(0,1).capitalize + element.slice(1..-1) new_element = element.slice(0,1).capitalize + element.slice(1..-1)
new_element= new_element.gsub("_"," ") new_element= new_element.gsub("_"," ")
description_string=description_string+new_element.to_s+": "+@json_object[element].to_s+"\n" description_string=description_string+new_element.to_s+": "+Sanitize.clean(@json_object[element].to_s)+"\n"
end end
end end
end end
@ -696,7 +707,7 @@ def protocolsio_import_save
when "1" when "1"
if !key["data"].nil? && key["data"]!="" if !key["data"].nil? && key["data"]!=""
element_string="<br>"+key["data"]+"<br>" element_string="<br>"+(key["data"])+"<br>"
if(@import_object["steps"][step_pos.to_s]["description"]) if(@import_object["steps"][step_pos.to_s]["description"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
else else
@ -714,7 +725,7 @@ def protocolsio_import_save
when "17" when "17"
if !key["data"].nil? && key["data"]!="" if !key["data"].nil? && key["data"]!=""
element_string="<br><strong>Expected result: </strong>"+key["data"]+"<br>" element_string="<br><strong>Expected result: </strong>"+(key["data"])+"<br>"
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end end
else else
@ -726,22 +737,33 @@ def protocolsio_import_save
elsif key && whitelist_complex.include?(key["component_type_id"]) elsif key && whitelist_complex.include?(key["component_type_id"])
case key["component_type_id"] case key["component_type_id"]
when "8" when "8"
element_string="<br><strong>Software package: </strong>"+key["source_data"]["name"]+"<br>Developer: "+key["source_data"]["developer"]+"<br>Version: "+key["source_data"]["version"]+"<br>Link: "+key["source_data"]["link"]+"<br>Repository: "+key["source_data"]["repository"]+"<br> OS name , OS version: "+key["source_data"]["os_name"]+" , "+key["source_data"]["os_version"] if(key["source_data"]["name"]&&key["source_data"]["developer"]&&key["source_data"]["version"]&&key["source_data"]["link"]&&key["source_data"]["repository"]&&key["source_data"]["os_name"]&&key["source_data"]["os_version"])
element_string="<br><strong>Software package: </strong>"+(key["source_data"]["name"])+"<br>Developer: "+(key["source_data"]["developer"])+"<br>Version: "+(key["source_data"]["version"])+"<br>Link: "+(key["source_data"]["link"])+"<br>Repository: "+(key["source_data"]["repository"])+"<br> OS name , OS version: "+(key["source_data"]["os_name"])+" , "+(key["source_data"]["os_version"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "9" when "9"
element_string="<br><strong>Dataset: </strong>"+key["source_data"]["name"]+"<br>Link: "+key["source_data"]["link"] if(key["source_data"]["name"]&&key["source_data"]["link"])
element_string="<br><strong>Dataset: </strong>"+(key["source_data"]["name"])+"<br>Link: "+(key["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "15" when "15"
element_string="<br><strong>Command: </strong>"+key["source_data"]["name"]+"<br>Description: "+key["source_data"]["description"]+"<br>OS name , OS version: "+key["source_data"]["os_name"]+" , "+key["source_data"]["os_version"] if(key["source_data"]["name"]&&key["source_data"]["description"]&&key["source_data"]["os_name"]&&key["source_data"]["os_version"])
element_string="<br><strong>Command: </strong>"+(key["source_data"]["name"])+"<br>Description: "+(key["source_data"]["description"])+"<br>OS name , OS version: "+(key["source_data"]["os_name"])+" , "+(key["source_data"]["os_version"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "18" when "18"
element_string="<br><strong>This protocol also contains an attached sub-protocol: </strong>"+key["source_data"]["protocol_name"]+"<br>Author: "+key["source_data"]["full_name"]+"<br>Link: "+key["source_data"]["link"] if(key["source_data"]["protocol_name"]&&key["source_data"]["full_name"]&&key["source_data"]["link"])
element_string="<br><strong>This protocol also contains an attached sub-protocol: </strong>"+(key["source_data"]["protocol_name"])+"<br>Author: "+(key["source_data"]["full_name"])+"<br>Link: "+(key["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
end
#if key["source_data"]["link"]&&key["source_data"]["link"]!="" #if key["source_data"]["link"]&&key["source_data"]["link"]!=""
#end #end
when "19" when "19"
element_string="<br><strong>Safety information</strong>"+key["source_data"]["body"]+"<br>Link: "+key["source_data"]["link"] if(key["source_data"]["body"]&&key["source_data"]["link"])
element_string="<br><strong>Safety information: </strong>"+(key["source_data"]["body"])+"<br>Link: "+(key["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "20" when "20"
else else
@ -759,7 +781,7 @@ def protocolsio_import_save
when "1" when "1"
if !value["data"].nil? && value["data"]!="" if !value["data"].nil? && value["data"]!=""
element_string="<br>"+value["data"]+"<br>" element_string="<br>"+(value["data"].to_s)+"<br>"
if(@import_object["steps"][step_pos.to_s]["description"]) if(@import_object["steps"][step_pos.to_s]["description"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
else else
@ -777,7 +799,7 @@ def protocolsio_import_save
when "17" when "17"
if !value["data"].nil? && value["data"]!="" if !value["data"].nil? && value["data"]!=""
element_string="<br><strong>Expected result: </strong>"+value["data"]+"<br>" element_string="<br><strong>Expected result: </strong>"+(value["data"])+"<br>"
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end end
else else
@ -789,22 +811,37 @@ def protocolsio_import_save
elsif value && whitelist_complex.include?(value["component_type_id"]) elsif value && whitelist_complex.include?(value["component_type_id"])
case value["component_type_id"] case value["component_type_id"]
when "8" when "8"
element_string="<br><strong>Software package: </strong>"+value["source_data"]["name"]+"<br>Developer: "+value["source_data"]["developer"]+"<br>Version: "+value["source_data"]["version"]+"<br>Link: "+value["source_data"]["link"]+"<br>Repository: "+value["source_data"]["repository"]+"<br> OS name , OS version: "+value["source_data"]["os_name"]+" , "+value["source_data"]["os_version"] if(value["source_data"]["name"]&&value["source_data"]["developer"]&&value["source_data"]["version"]&&value["source_data"]["link"]&&value["source_data"]["repository"]&&value["source_data"]["os_name"]&&value["source_data"]["os_version"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
when "9"
element_string="<br><strong>Dataset: </strong>"+value["source_data"]["name"]+"<br>Link: "+value["source_data"]["link"]
@import_object["steps"][step_pos.to_s]["description"]<<element_string
when "15"
element_string="<br><strong>Command: </strong>"+value["source_data"]["name"]+"<br>Description: "+value["source_data"]["description"]+"<br>OS name , OS version: "+value["source_data"]["os_name"]+" , "+value["source_data"]["os_version"]
@import_object["steps"][step_pos.to_s]["description"]<<element_string
when "18"
element_string="<br><strong>This protocol also contains an attached sub-protocol: </strong>"+value["source_data"]["protocol_name"]+"<br>Author: "+value["source_data"]["full_name"]+"<br>Link: "+value["source_data"]["link"]
element_string="<br><strong>Software package: </strong>"+(value["source_data"]["name"])+"<br>Developer: "+(value["source_data"]["developer"])+"<br>Version: "+(value["source_data"]["version"])+"<br>Link: "+(value["source_data"]["link"])+"<br>Repository: "+(value["source_data"]["repository"])+"<br> OS name , OS version: "+(value["source_data"]["os_name"])+" , "+(value["source_data"]["os_version"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "9"
if(value["source_data"]["name"]&&value["source_data"]["link"])
element_string="<br><strong>Dataset: </strong>"+(value["source_data"]["name"])+"<br>Link: "+(value["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "15"
if(value["source_data"]["name"]&&value["source_data"]["description"]&&value["source_data"]["os_name"]&&value["source_data"]["os_version"])
element_string="<br><strong>Command: </strong>"+(value["source_data"]["name"])+"<br>Description: "+(value["source_data"]["description"])+"<br>OS name , OS version: "+(value["source_data"]["os_name"])+" , "+(value["source_data"]["os_version"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "18"
if(value["source_data"]["protocol_name"]&&value["source_data"]["full_name"]&&value["source_data"]["link"])
element_string="<br><strong>This protocol also contains an attached sub-protocol: </strong>"+(value["source_data"]["protocol_name"])+"<br>Author: "+(value["source_data"]["full_name"])+"<br>Link: "+(value["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string
end
#if key["source_data"]["link"]&&key["source_data"]["link"]!="" #if key["source_data"]["link"]&&key["source_data"]["link"]!=""
#end #end
when "19" when "19"
element_string="<br><strong>Safety information</strong>"+value["source_data"]["body"]+"<br>Link: "+value["source_data"]["link"] if(value["source_data"]["body"]&&value["source_data"]["link"])
element_string="<br><strong>Safety information: </strong>"+(value["source_data"]["body"])+"<br>Link: "+(value["source_data"]["link"])
@import_object["steps"][step_pos.to_s]["description"]<<element_string @import_object["steps"][step_pos.to_s]["description"]<<element_string
end
when "20" when "20"
else else
@ -819,10 +856,10 @@ def protocolsio_import_save
respond_to do |format| respond_to do |format|
transaction_error = false transaction_error = false
#@steps_object=JSON.parse(params["steps"]["steps_object"]) #@steps_object=JSON.parse(params["steps"]["steps_object"])
@protocolsio_general_error=false
Protocol.transaction do Protocol.transaction do
begin begin
#byebug
protocol = import_new_protocol(@import_object, current_team, params[:type].to_sym, current_user) protocol = import_new_protocol(@import_object, current_team, params[:type].to_sym, current_user)
rescue Exception rescue Exception
@ -841,15 +878,17 @@ def protocolsio_import_save
if transaction_error if transaction_error
format.json { @protocolsio_general_error=true
render json: { name: p_name, status: :bad_request }, status: :bad_request # format.json {
} # render json: { name: p_name, status: :bad_request }, status: :bad_request
# }
format.js{} format.js{}
#:location => root_url #:location => root_url
# protocolsDatatable.ajax.reload(); # protocolsDatatable.ajax.reload();
# $('#modal-import-json-protocol-preview').modal('hide'); # $('#modal-import-json-protocol-preview').modal('hide');
else else
@protocolsio_general_error=false
format.json { format.json {
render json: { render json: {
name: p_name, new_name: protocol.name, status: :ok name: p_name, new_name: protocol.name, status: :ok

View file

@ -86,6 +86,13 @@
<strong>Guidelines:</strong><br> <strong>Guidelines:</strong><br>
<%= (@json_object["guidelines"]) %><br> <%= (@json_object["guidelines"]) %><br>
<% end %>
<% if @json_object["link"]&&@json_object["link"]!="" %>
<br><strong>Supplied link:</strong><br>
<%= (@json_object["link"]) %>
<% end %> <% end %>
<% counter=0 %> <% counter=0 %>
@ -317,37 +324,37 @@
<% if @json_object["manuscript_citation"]&&@json_object["manuscript_citation"]!="" %> <% if @json_object["manuscript_citation"]&&@json_object["manuscript_citation"]!="" %>
<br><strong>Manuscript citation</strong><br> <br><strong>Manuscript citation:</strong><br>
<%= (@json_object["manuscript_citation"]) %> <%= (@json_object["manuscript_citation"]) %>
<% end %> <% end %>
<% if @json_object["publish_date"]&&@json_object["publish_date"]!="" %> <% if @json_object["publish_date"]&&@json_object["publish_date"]!="" %>
<br><strong>Publish date</strong><br> <br><strong>Publish date:</strong><br>
<%= (@json_object["publish_date"]) %> <%= (@json_object["publish_date"]) %>
<% end %> <% end %>
<% if @json_object["vendor_name"]&&@json_object["vendor_name"]!="" %> <% if @json_object["vendor_name"]&&@json_object["vendor_name"]!="" %>
<br><strong>Vendor name</strong><br> <br><strong>Vendor name:</strong><br>
<%= (@json_object["vendor_name"]) %> <%= (@json_object["vendor_name"]) %>
<% end %> <% end %>
<% if @json_object["vendor_link"]&&@json_object["vendor_link"]!="" %> <% if @json_object["vendor_link"]&&@json_object["vendor_link"]!="" %>
<br><strong>Vendor link</strong><br> <br><strong>Vendor link:</strong><br>
<%= (@json_object["vendor_link"]) %> <%= (@json_object["vendor_link"]) %>
<% end %> <% end %>
<% if @json_object["keywords"]&&@json_object["keywords"]!="" %> <% if @json_object["keywords"]&&@json_object["keywords"]!="" %>
<br><strong>Keywords</strong><br> <br><strong>Keywords:</strong><br>
<%= (@json_object["keywords"]) %> <%= (@json_object["keywords"]) %>
<% end %> <% end %>
<% if @json_object["tags"]&&@json_object["tags"]!="" %> <% if @json_object["tags"]&&@json_object["tags"]!="" %>
<br><strong>Tags</strong><br> <br><strong>Tags:</strong><br>
<% @json_object["tags"].each do |tag| %> <% @json_object["tags"].each do |tag| %>
<%= (tag["tag_name"])+" , " %> <%= (tag["tag_name"])+" , " %>
<% end %> <% end %>

View file

@ -1,9 +1,16 @@
$('#modal-import-json-protocol').modal('hide'); <% if @protocolsio_too_big %>
<% if remotipart_submitted? %> alert('<%= I18n.t('my_modules.protocols.load_from_file_size_error',
$('#protocolsio-preview-modal-target').html("<%= j "#{render(:partial => 'protocols/import_export/import_json_protocol_preview_modal')}" %>"); size: Constants::FILE_MAX_SIZE_MB ) %>');
<% else %> <% else %>
$('#protocolsio-preview-modal-target').html("<%= j render(:partial => 'protocols/import_export/import_json_protocol_preview_modal') %>");
<% end %>
$('#modal-import-json-protocol-preview').modal('show'); $('#modal-import-json-protocol').modal('hide');
<% if remotipart_submitted? %>
$('#protocolsio-preview-modal-target').html("<%= j "#{render(:partial => 'protocols/import_export/import_json_protocol_preview_modal')}" %>");
<% else %>
$('#protocolsio-preview-modal-target').html("<%= j render(:partial => 'protocols/import_export/import_json_protocol_preview_modal') %>");
<% end %>
$('#modal-import-json-protocol-preview').modal('show');
<% end %>

View file

@ -1,2 +1,7 @@
<% if @protocolsio_general_error %>
alert('<%= I18n.t('my_modules.protocols.load_from_file_protocol_general_error', max: Constants::NAME_MAX_LENGTH, min: Constants::NAME_MIN_LENGTH) %>');
<% else %>
$('#modal-import-json-protocol-preview').modal('hide'); $('#modal-import-json-protocol-preview').modal('hide');
protocolsDatatable.ajax.reload(); protocolsDatatable.ajax.reload();
<% end %>

View file

@ -603,6 +603,7 @@ en:
load_from_file_error: "Failed to load the protocol from file." load_from_file_error: "Failed to load the protocol from file."
load_from_file_error_locked: "Failed to load the protocol from file. One or more files are currently being edited." load_from_file_error_locked: "Failed to load the protocol from file. One or more files are currently being edited."
load_from_file_size_error: "Failed to load the protocol from file. Limit is %{size}Mb." load_from_file_size_error: "Failed to load the protocol from file. Limit is %{size}Mb."
load_from_file_protocol_general_error: "Failed to load the protocol from file. It is likely that certain fields (protocol and individual step titles and names) contain too many or too few characters.(max is %{max} and min is %{min})"
results: results:
head_title: "%{project} | %{module} | Results" head_title: "%{project} | %{module} | Results"
add_label: "Add new result:" add_label: "Add new result:"