diff --git a/app/views/devise/registrations/new.html.erb b/app/views/devise/registrations/new.html.erb index 463f8f2..51aea26 100644 --- a/app/views/devise/registrations/new.html.erb +++ b/app/views/devise/registrations/new.html.erb @@ -21,11 +21,10 @@

<%= render :partial => 'shared/create_account_form', locals: {extended: false} %>

<% else %> -
+

<%= _("Create account") %>  

- <%= render :partial => 'shared/create_account_form', locals: {extended: true} %> + <%= render :partial => 'shared/create_account_form', locals: {extended: true} %>
<% end %>
- diff --git a/app/views/shared/_create_account_form.html.erb b/app/views/shared/_create_account_form.html.erb index 6bdf261..5098c49 100644 --- a/app/views/shared/_create_account_form.html.erb +++ b/app/views/shared/_create_account_form.html.erb @@ -15,8 +15,8 @@
<%= render partial: "shared/my_org", locals: {f: f, default_org: @default_org, - orgs: Org.where("parent_id IS NULL").order("sort_name ASC, name ASC"), - allow_other_orgs: true, required: true} %> + orgs: Org.where("parent_id IS NULL AND is_other IS NULL").order("sort_name ASC, name ASC"), + allow_other_orgs: true, required: false} %>
diff --git a/app/views/shared/_my_org.html.erb b/app/views/shared/_my_org.html.erb index 375c9ef..059d714 100644 --- a/app/views/shared/_my_org.html.erb +++ b/app/views/shared/_my_org.html.erb @@ -9,15 +9,20 @@ models: orgs, attribute: 'name', error: _('Please select an organisation from the list, or click the "My organisation isn\'t listed" link and enter your organisation\'s name.'), - required: required} %> + required: false} %> + + <% if allow_other_orgs %>
<%= f.hidden_field :other_org_id, value: other_org.present? ? other_org.id : '' %> + <%= f.hidden_field :other_org_name, value: other_org.present? ? other_org.name : '' %> <%= _('My organisation isn\'t listed.') %>
- <%= f.text_field :other_organisation, autocomplete: "off", class: "form-control hide other-org", + <%= f.text_field :other_organisation, autocomplete: "off", class: "form-control hide other-org", placeholder: _('Please enter the name of your organisation'), "aria-label": "other_organisation" %> <% end %> diff --git a/lib/assets/javascripts/views/devise/registrations/edit.js b/lib/assets/javascripts/views/devise/registrations/edit.js index 577fe8f..9abeaca 100644 --- a/lib/assets/javascripts/views/devise/registrations/edit.js +++ b/lib/assets/javascripts/views/devise/registrations/edit.js @@ -1,5 +1,5 @@ import ariatiseForm from '../../../utils/ariatiseForm'; -import initMyOrgCombobox from '../../shared/my_org'; +import { initMyOrgCombobox } from '../../shared/my_org'; import { isString } from '../../../utils/isType'; import { isValidPassword } from '../../../utils/isValidInputType'; import { addMatchingPasswordValidator, togglisePasswords } from '../../../utils/passwordHelper'; diff --git a/lib/assets/javascripts/views/orgs/shibboleth_ds.js b/lib/assets/javascripts/views/orgs/shibboleth_ds.js index 9f026cd..46584a9 100644 --- a/lib/assets/javascripts/views/orgs/shibboleth_ds.js +++ b/lib/assets/javascripts/views/orgs/shibboleth_ds.js @@ -1,6 +1,6 @@ import ariatiseForm from '../../utils/ariatiseForm'; import getConstant from '../../constants'; -import initMyOrgCombobox from '../shared/my_org'; +import { initMyOrgCombobox } from '../shared/my_org'; $(() => { ariatiseForm({ selector: '#shibboleth_ds' }); diff --git a/lib/assets/javascripts/views/shared/create_account_form.js b/lib/assets/javascripts/views/shared/create_account_form.js index a423660..d29432f 100644 --- a/lib/assets/javascripts/views/shared/create_account_form.js +++ b/lib/assets/javascripts/views/shared/create_account_form.js @@ -1,10 +1,21 @@ import ariatiseForm from '../../utils/ariatiseForm'; import { togglisePasswords } from '../../utils/passwordHelper'; -import initMyOrgCombobox from '../shared/my_org'; +import { initMyOrgCombobox, validateOrgSelection } from '../shared/my_org'; $(() => { const options = { selector: '#create-account-form' }; - initMyOrgCombobox(options); ariatiseForm(options); togglisePasswords(options); + + $('#create_account_form').on('submit', (e) => { + // Additional validation to force the user to choose an org or type something for other + if (validateOrgSelection()) { + $('#help-org').hide(); + } else { + e.preventDefault(); + $('#help-org').show(); + } + }); + + initMyOrgCombobox(options); }); diff --git a/lib/assets/javascripts/views/shared/my_org.js b/lib/assets/javascripts/views/shared/my_org.js index a38eb26..20ab5f7 100644 --- a/lib/assets/javascripts/views/shared/my_org.js +++ b/lib/assets/javascripts/views/shared/my_org.js @@ -1,16 +1,18 @@ import { isObject } from '../../utils/isType'; import { isValidText } from '../../utils/isValidInputType'; -export default (options) => { +export const initMyOrgCombobox = (options) => { if (isObject(options) && options.selector) { const div = $(options.selector); if (isObject(div)) { const combo = div.find('input.js-combobox'); const id = div.find('input.org-id'); + const name = div.find('input[name="user[org_name]"]'); const text = div.find('input.other-org'); const link = div.find('a.other-org-link'); const otherOrg = div.find('input[name="user[other_org_id]"]'); + const otherOrgName = div.find('input[name="user[other_org_name]"]'); const toggleInputs = (showCombo) => { if (showCombo) { @@ -36,6 +38,7 @@ text.blur(() => { if (isObject(id)) { id.val(text.val().length > 0 ? otherOrg.val() : ''); + name.val(text.val().length > 0 ? otherOrgName.val() : ''); } }); @@ -48,3 +51,10 @@ } } }; + +export const validateOrgSelection = () => { + const orgId = $('[name="user[org_id]"]'); + const otherOrg = $('[name="user[other_organisation]"]'); + + return isValidText(orgId.val()) || isValidText(otherOrg.val()); +}; diff --git a/lib/assets/javascripts/views/super_admin/users/edit.js b/lib/assets/javascripts/views/super_admin/users/edit.js index 4d0e24e..85d5c71 100644 --- a/lib/assets/javascripts/views/super_admin/users/edit.js +++ b/lib/assets/javascripts/views/super_admin/users/edit.js @@ -1,5 +1,5 @@ import ariatiseForm from '../../../utils/ariatiseForm'; -import initMyOrgCombobox from '../../shared/my_org'; +import { initMyOrgCombobox } from '../../shared/my_org'; $(() => { ariatiseForm({ selector: '#super_admin_user_edit' });