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} %>
+
+
+ <%= _('Please select an organisation from the list, or click the "My organisation isn\'t listed" link and enter your organisation\'s name.') %>
+
<% 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' });