From 5925571f01326e98880d30e6f70a058e66b1c95a Mon Sep 17 00:00:00 2001 From: Bilel Kihal <61744974+Bilelkihal@users.noreply.github.com> Date: Sun, 4 Aug 2024 11:46:47 +0200 Subject: [PATCH] Feature: Make agent indentifiers field set by default based on agent type (#721) * remove the restriction for certain submission fields to create only organization type or person type agents * make orcid or ror default input based on agent type in agent form * fix disappeared signup form icons * fix nested agents creation * fix agent form not filling saved identifier values * create an agent identifier input helper * disable cookie banner in development and test mode * fix agent tests after enforcing ROR for organizations --------- Co-authored-by: Syphax --- app/assets/stylesheets/agents.scss | 19 ++++++++ app/controllers/agents_controller.rb | 4 ++ app/helpers/agent_helper.rb | 18 +++++++ app/views/agents/_form.html.haml | 36 +++++++------- app/views/layouts/_header.html.erb | 72 +++++++++++++++++----------- app/views/users/_form.html.haml | 4 +- test/system/agent_flows_test.rb | 4 +- 7 files changed, 110 insertions(+), 47 deletions(-) diff --git a/app/assets/stylesheets/agents.scss b/app/assets/stylesheets/agents.scss index df7b74d71..bed9b6b14 100644 --- a/app/assets/stylesheets/agents.scss +++ b/app/assets/stylesheets/agents.scss @@ -31,4 +31,23 @@ display: flex !important; flex-direction: column; justify-content: center; +} +.agent-input-with-icon{ + padding: 8px; + margin-bottom: 0px; + border-radius: 5px; + width: 100%; + color: #5f6573; + outline: none; + font-size: 15px; + font-weight: 500; + border: 1px solid #d7d7d7; + padding-left: 45px; +} +.agent-input-icon{ + height: 20px; + width: 20px; + position: absolute; + padding: 11px 17px; + box-sizing: unset; } \ No newline at end of file diff --git a/app/controllers/agents_controller.rb b/app/controllers/agents_controller.rb index 652e01a40..7ee6f3808 100644 --- a/app/controllers/agents_controller.rb +++ b/app/controllers/agents_controller.rb @@ -273,6 +273,10 @@ def agent_params v end end + identifiers_schemaAgency = params[:agentType].eql?('person') ? 'ORCID' : 'ROR' + p[:identifiers]&.each_value do |identifier| + identifier[:schemaAgency] = identifiers_schemaAgency + end p[:identifiers] = (p[:identifiers] || {}).values p[:affiliations] = (p[:affiliations] || {}).values p[:affiliations].each do |affiliation| diff --git a/app/helpers/agent_helper.rb b/app/helpers/agent_helper.rb index 513854f0f..6c5366bf7 100644 --- a/app/helpers/agent_helper.rb +++ b/app/helpers/agent_helper.rb @@ -82,6 +82,24 @@ def identifier_link(link, link_to: true) end + + def agent_identifier_input(index, name_prefix, value = '', is_organization: true) + + content_tag :div, id: index, class: 'd-flex' do + content_tag(:div, class: 'w-100') do + + concat hidden_field_tag(agent_identifier_name(index , :creator, name_prefix), session[:user].id) + if is_organization + concat inline_svg_tag 'icons/ror.svg', class: 'agent-input-icon' + else + concat inline_svg_tag('orcid.svg', class: 'agent-input-icon') + end + concat text_field_tag(agent_identifier_name(index, :notation, name_prefix), value, class: 'agent-input-with-icon') + end + end + end + + def display_identifiers(identifiers, link: true) schemes_urls = { ORCID: 'https://orcid.org/', ISNI: 'https://isni.org/', ROR: 'https://ror.org/', GRID: 'https://www.grid.ac/' } Array(identifiers).map do |i| diff --git a/app/views/agents/_form.html.haml b/app/views/agents/_form.html.haml index 20c35857d..2e8aa35d4 100644 --- a/app/views/agents/_form.html.haml +++ b/app/views/agents/_form.html.haml @@ -9,7 +9,7 @@ = hidden_field_tag :deletable, deletable if deletable = hidden_field_tag agent_field_name(:id, name_prefix), agent.id if agent.id - - if is_organization?(agent) && params[:parent_id] + - if is_organization?(agent) && params[:parent_id] = hidden_field_tag agent_field_name(:agentType, name_prefix), agent.agentType - else %tr @@ -56,27 +56,31 @@ %th = t("agents.form.identifiers") %td.top - %div.agents-identifiers + %div.agents-identifiers{'data-form-options-display-target':"option1", class: is_organization?(agent) && 'd-none'} = render NestedFormInputsComponent.new do |c| - c.template do - %div.d-flex{id: 'NEW_RECORD'} - %div.w-100 - = hidden_field_tag agent_identifier_name('NEW_RECORD' , :creator, name_prefix), session[:user].id - = text_field_tag agent_identifier_name('NEW_RECORD' , :notation, name_prefix), '', class: "form-control" - %div{style:'width: 15%'} - - values = %w[ORCID ROR ISNI GRID] - = render SelectInputComponent.new(id: "agent_identifiers_schemaAgency_NEW_RECORD", name: agent_identifier_name('NEW_RECORD', :schemaAgency, name_prefix), values: values, selected: 'ORCID') + = agent_identifier_input('NEW_RECORD', name_prefix) + - c.empty_state do = hidden_field_tag agent_field_name('', name_prefix+"[#{Array(agent.identifiers).size}]") + - Array(agent.identifiers).each_with_index do |identifier, i| - c.row do - %div.d-flex{id: identifier.id} - %div.w-100 - = hidden_field_tag agent_identifier_name(i.to_s.upcase, :creator, name_prefix), session[:user].id - = text_field_tag agent_identifier_name(i.to_s.upcase, :notation, name_prefix), identifier.notation, class: "form-control" - %div{style:'width: 15%'} - - values = %w[ORCID ROR ISNI GRID] - = render SelectInputComponent.new(id: "#{name_prefix}_identifiers_schemaAgency_#{i.to_s.upcase}", name: agent_identifier_name(i.to_s.upcase, :schemaAgency, name_prefix), values: values, selected: identifier.schemaAgency) + = agent_identifier_input(i.to_s.upcase, name_prefix, identifier.notation) + + %div.agents-identifiers{'data-form-options-display-target':"option2", class: !is_organization?(agent) && 'd-none'} + = render NestedFormInputsComponent.new do |c| + - c.template do + = agent_identifier_input('NEW_RECORD', name_prefix, is_organization: false) + + - c.empty_state do + = hidden_field_tag agent_field_name('', name_prefix+"[#{Array(agent.identifiers).size}]") + + - Array(agent.identifiers).each_with_index do |identifier, i| + - c.row do + = agent_identifier_input(i.to_s.upcase, name_prefix, identifier.notation, is_organization: false) + + - if show_affiliations %tr{'data-form-options-display-target':"option1", class: is_organization?(agent) && 'd-none'} %th diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 244d0a15b..07d28d73d 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -1,25 +1,28 @@ - lang="<%=I18n.locale%>"> + lang="<%= I18n.locale %>"> - <%= render partial: 'ga_tracking' %> - + <%= render partial: 'ga_tracking' %> + - - + + - <% unless Rails.env.appliance? %> + <% unless Rails.env.appliance? %> - + <% end %> - - <%= csrf_meta_tag %> - - <%if @title.nil?%><%=$ORG_SITE%><%else%><%="#{@title} | #{$ORG_SITE}"%><%end%> - - - - - + + <%= csrf_meta_tag %> + + + <% if @title.nil? %><%= $ORG_SITE %> + <% else %><%= "#{@title} | #{$ORG_SITE}" %> + <% end %> + + + + + <%= stylesheet_link_tag "https://use.fontawesome.com/releases/v5.2.0/css/all.css", integrity: "sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ", crossorigin: "anonymous" %> <%= stylesheet_link_tag "application" %> @@ -27,19 +30,34 @@ <%= javascript_include_tag "vendor" %> - + - <%=render partial: 'layouts/topnav'%> - <%= turbo_frame_tag :cookies_modal, src: cookies_path if session[:cookies_accepted].nil? %> +<%= render partial: 'layouts/topnav' %> +<%= turbo_frame_tag :cookies_modal, src: cookies_path if session[:cookies_accepted].nil? && !(Rails.env.development? || Rails.env.test?) %> -
- <%=render partial: 'layouts/notices'%> \ No newline at end of file +
+<%= render partial: 'layouts/notices' %> \ No newline at end of file diff --git a/app/views/users/_form.html.haml b/app/views/users/_form.html.haml index 3a2f38b52..02fde4988 100644 --- a/app/views/users/_form.html.haml +++ b/app/views/users/_form.html.haml @@ -27,13 +27,13 @@ ORCID ID %font.register-optional = t('register.optional') - %img.register-input-icon{:src => "#{asset_path("orcid.svg")}"}/ + = inline_svg_tag 'orcid.svg', class: 'register-input-icon' = text_field :user, :orcidId, value: @user.orcidId, class: "register-input-long register-input-with-icon" %p.register-input-title Github ID %font.register-optional = t('register.optional') - %img.register-input-icon{:src => "#{asset_path("github-icon.svg")}"}/ + = inline_svg_tag 'github-icon.svg', class: 'register-input-icon' = text_field :user, :githubId, value: @user.githubId, class: "register-input-long register-input-with-icon" %p.register-input-title = t('register.email') diff --git a/test/system/agent_flows_test.rb b/test/system/agent_flows_test.rb index 953c4d2e4..5eeb72055 100644 --- a/test/system/agent_flows_test.rb +++ b/test/system/agent_flows_test.rb @@ -68,7 +68,7 @@ def create_agent_flow(new_agent, person_count: , organization_count:) within "table#admin_agents" do assert_selector '.human', count: person_count + organization_count # all created agents assert_text new_agent.name - new_agent.identifiers.map{|x| "https://orcid.org/#{x["notation"]}"}.each do |orcid| + new_agent.identifiers.map{|x| "https://#{new_agent.agentType.eql?('organization') ? 'ror' : 'orcid'}.org/#{x["notation"]}"}.each do |orcid| assert_text orcid end @@ -91,7 +91,7 @@ def edit_agent_flow(agent, person_count: , organization_count: ) within "table#admin_agents" do assert_selector '.human', count: person_count + organization_count # all created agents assert_text agent.name - agent.identifiers.map{|x| "https://orcid.org/#{x["notation"]}"}.each do |orcid| + agent.identifiers.map{|x| "https://#{agent.agentType.eql?('organization') ? 'ror' : 'orcid'}.org/#{x["notation"]}"}.each do |orcid| assert_text orcid end assert_text 'person', count: person_count