Skip to content

Commit

Permalink
Added subscription form for HUB users
Browse files Browse the repository at this point in the history
  • Loading branch information
sab-LC committed Oct 2, 2024
1 parent e769833 commit 7f99f32
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 58 deletions.
52 changes: 51 additions & 1 deletion localcontexts/static/javascript/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2435,4 +2435,54 @@ if (window.location.href.includes('subscription-inquiry')) {
}

function clearSuggestions() { suggestionsContainer.innerHTML = '' }
})}
})}

if (window.location.href.includes('subscription-form')) {
document.addEventListener("DOMContentLoaded", function () {
const firstNameInput = document.querySelector('input[name="first_name"]');
const lastNameInput = document.querySelector('input[name="last_name"]');
const emailInput = document.querySelector('input[type="email"]');
const organizationInput = document.querySelector('input[name="organization_name"]');
const inquiryTypeRadios = document.querySelectorAll('input[name="inquiry_type"]');
const submitButton = document.getElementById("createSubscription");
const clearFormBtn = document.getElementById('clearFormBtn')

validateForm()

firstNameInput.addEventListener("input", validateForm);
emailInput.addEventListener("input", validateForm);
if (inquiryTypeRadios.length > 0) {
inquiryTypeRadios.forEach(radio => radio.addEventListener("change", validateForm));
}

function validateForm() {
const firstNameFilled = firstNameInput.value.trim() !== "";
const emailFilled = emailInput.value.trim() !== "" && isValidEmail(emailInput.value.trim());
const inquiryTypeSelected = inquiryTypeRadios.length > 0
? Array.from(inquiryTypeRadios).some(radio => radio.checked)
: true;
// Enable the button if all fields are valid
if (firstNameFilled && emailFilled && inquiryTypeSelected) {
submitButton.disabled = false;
} else {
submitButton.disabled = true;
}
}

function isValidEmail(email) {
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
clearFormBtn.addEventListener('click', (e) => {
e.preventDefault()
firstNameInput.value = ''
submitButton.disabled = true

lastNameInput.value = ''
emailInput.value = ''
inquiryTypeRadios.forEach(radio => {
radio.checked = false;
});
})
});
};
5 changes: 5 additions & 0 deletions researchers/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@
views.connect_service_provider,
name="researcher-connect-service-provider"
),
path(
'subscription-form/<str:pk>/',
views.create_researcher_subscription,
name="researcher-create-subscription-form"
),

# Notices
path('notices/<str:pk>', views.researcher_notices, name="researcher-notices"),
Expand Down
44 changes: 43 additions & 1 deletion researchers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
)
from helpers.utils import (
crud_notices, create_or_update_boundary, get_notice_defaults, get_notice_translations,
check_subscription, validate_recaptcha, form_initiation, get_certified_service_providers
check_subscription, validate_recaptcha, form_initiation, get_certified_service_providers,
handle_confirmation_and_subscription,
)
from accounts.utils import get_users_name
from notifications.utils import (
Expand Down Expand Up @@ -1397,3 +1398,44 @@ def api_keys(request, researcher, related=None):
return render(request, 'account_settings_pages/_api-keys.html', context)
except Exception as e:
raise Http404(str(e))

@login_required(login_url="login")
def create_researcher_subscription(request, pk):
researcher = Researcher.objects.get(id=pk)
env = dev_prod_or_local(request.get_host())
initial_data = {
"first_name": request.user._wrapped.first_name,
"last_name": request.user._wrapped.last_name,
"email": request.user._wrapped.email,
"organization_name": researcher.primary_institution,
}
subscription_form = SubscriptionForm(initial=initial_data)
subscription_form.fields['organization_name'].widget.attrs.update({"class": "w-100 readonly-input"})

if request.method == "POST":
if validate_recaptcha(request):
mutable_post_data = request.POST.copy()
subscription_data = {
"first_name": request.user._wrapped.first_name,
"last_name": request.user._wrapped.last_name,
"email": request.user._wrapped.email,
"inquiry_type": "Subscription",
"account_type": "researcher_account",
"organization_name": get_users_name(request.user),
}
mutable_post_data.update(subscription_data)
subscription_form = SubscriptionForm(mutable_post_data)
if subscription_form.is_valid() and env != 'SANDBOX':
handle_confirmation_and_subscription(request, subscription_form, researcher, env)
return redirect('dashboard')
else:
messages.add_message(
request, messages.ERROR, "Something went wrong. Please Try again later.",
)
return redirect('dashboard')
return render(
request, "account_settings_pages/_subscription-form.html", {
"subscription_form": subscription_form,
'researcher': researcher
}
)
66 changes: 11 additions & 55 deletions templates/account_settings_pages/_subscription-form.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,21 @@
</script>
<div class="flex-this column account-registration-container">
<div class="flex-this space-between">
<div><h2 class="mt-0 mb-8">Institution Account </h2></div>
<div><h2 class="mt-0 mb-8">{% if institution %} Institution Account {% else %} Researcher Account {% endif %}</h2></div>
<div>Or <a class="default-a" href="{% url 'connect-institution' %}">request to join an existing institution</a> </div>
</div>

<p class="mb-0 mt-0">
{% if institution %}
The institution details provided below will default to a public display in the Local Contexts Registry.
Providing your details will give consent to publicly being listed on the Registry.
Read more about our privacy standards <a class="default-a" href="https://localcontexts.org/privacy-policy/" target="_blank" rel="noopener">here <i class="fa-solid fa-arrow-up-right-from-square fa-xs"></i></a>
Read more about our privacy standards {% else %} A researcher is a person who carries out academic or scientific research
independently or in an institution, such as archive, library, museum, historical society, gallery, data repository, or university.
{% endif %}
<a class="default-a" href="https://localcontexts.org/privacy-policy/" target="_blank" rel="noopener">here <i class="fa-solid fa-arrow-up-right-from-square fa-xs"></i></a>
</p>

<form action="{%url 'institution-create-subscription-form' institution.id %}" method="POST" class="flex-this column w-100">
<form action="{% if institution %}{% url 'institution-create-subscription-form' institution.id %}{% else %}{% url 'researcher-create-subscription-form' researcher.id %}{% endif %}" method="POST" class="flex-this column w-100">
{% csrf_token %}

<div class="w-100 flex-this mt-16">
Expand All @@ -47,7 +51,7 @@
<label>Institution Name<span class="orange-text required-label" title="">*</span></label>
{{ subscription_form.organization_name }}
</div>

{% if institution %}
<div class="w-100">
<div class="pad-top-1-5 radio-group mb-1p">
<label for="inquiry_type" class="inquiry-label">Inquiry Type<span class="orange-text required-label" title="">*</span></label>
Expand All @@ -67,7 +71,7 @@
</div>
</div>
</div>

{% endif %}
<div class="flex-this flex-end mt-8">
<div class="flex-this creat-account__container-width__buttons">
<input
Expand All @@ -81,10 +85,10 @@
</div>

<div class="flex-this flex-end">
<button id="createSubscription" class="primary-btn action-btn mt-2p" onclick="disableButton()">
<button id="createSubscription" class="primary-btn action-btn mt-2p">
Continue <i class="fa fa-arrow-right"></i>
</button>
<div id="loading-spinner" class="primary-btn action-btn mt-2p hide disabled-btn">
<div id="loading-spinner" class="primary-btn action-btn mt-2p hide {% if institution %} disabled-btn {% endif %}">
Continue <i class="fa fa-arrow-right"></i>
<i class="fa spinner-container fa-spinner fa-spin fa-2x spinner "></i>
</div>
Expand All @@ -95,52 +99,4 @@
</form>

</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
const firstNameInput = document.querySelector('input[name="first_name"]');
const lastNameInput = document.querySelector('input[name="last_name"]');
const emailInput = document.querySelector('input[type="email"]');
const organizationInput = document.querySelector('input[name="organization_name"]');
const inquiryTypeRadios = document.querySelectorAll('input[name="inquiry_type"]');
const submitButton = document.getElementById("createSubscription");
const clearFormBtn = document.getElementById('clearFormBtn')

// Disable the button by default
submitButton.disabled = true;

// Add event listeners to inputs
firstNameInput.addEventListener("input", validateForm);
emailInput.addEventListener("input", validateForm);
inquiryTypeRadios.forEach(radio => radio.addEventListener("change", validateForm));

function validateForm() {
const firstNameFilled = firstNameInput.value.trim() !== "";
const emailFilled = emailInput.value.trim() !== "" && isValidEmail(emailInput.value.trim());
const inquiryTypeSelected = Array.from(inquiryTypeRadios).some(radio => radio.checked);

// Enable the button if all fields are valid
if (firstNameFilled && emailFilled && inquiryTypeSelected) {
submitButton.disabled = false;
} else {
submitButton.disabled = true;
}
}

function isValidEmail(email) {
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
clearFormBtn.addEventListener('click', (e) => {
e.preventDefault()
firstNameInput.value = ''
submitButton.disabled = true

lastNameInput.value = ''
emailInput.value = ''
inquiryTypeRadios.forEach(radio => {
radio.checked = false;
});
})
});
</script>
{% endblock %}
2 changes: 1 addition & 1 deletion templates/account_settings_pages/_subscription.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
{% elif subscription is None %}
<p class='red-text'>To unlock more activities in your account please subscribe</p>
<div>
<a href="{% if institution %}{% url 'institution-create-subscription-form' institution.id %}{% else %}{% url 'subscription' researcher.id 'researcher' %}{% endif %}">
<a href="{% if institution %}{% url 'institution-create-subscription-form' institution.id %}{% else %}{% url 'researcher-create-subscription-form' researcher.id %}{% endif %}">
<button type="submit" class="primary-btn action-btn" name="generatebtn">Fill out Subscription Form</button>
</a>
</div>
Expand Down

0 comments on commit 7f99f32

Please sign in to comment.