A CKAN extension for adding popup contact forms to pages.
Borrows much of the contact form code from ckanext-surrey.
An example can be seen on the Natural History Museum's Data Portal when clicking "Contact dataset curator."
This extension now includes Google's reCAPTCHA for preventing spam submissions.
Path variables used below:
$INSTALL_FOLDER
(i.e. where CKAN is installed), e.g./usr/lib/ckan/default
$CONFIG_FILE
, e.g./etc/ckan/default/development.ini
- Clone the repository into the
src
folder:
cd $INSTALL_FOLDER/src
git clone https://github.com/NaturalHistoryMuseum/ckanext-contact.git
- Activate the virtual env:
. $INSTALL_FOLDER/bin/activate
- Install the requirements from requirements.txt:
cd $INSTALL_FOLDER/src/ckanext-contact
pip install -r requirements.txt
- Run setup.py:
cd $INSTALL_FOLDER/src/ckanext-contact
python setup.py develop
- Add 'contact' to the list of plugins in your
$CONFIG_FILE
:
ckan.plugins = ... contact
There are no settings that must be provided in your .ini config file, but there are some options:
Name | Description | Default |
---|---|---|
ckanext.contact.mail_to |
Email address to submit to | email_to |
ckanext.contact.recipient_name |
Name of the recipient | ckan.site_title |
ckanext.contact.subject |
Email subject for the submitted form | 'Contact/Question from visitor' |
Name | Description | Default |
---|---|---|
ckanext.contact.recaptcha_v3_key |
API key for the reCAPTCHA service. | False (i.e. disabled) |
ckanext.contact.recaptcha_v3_secret |
API secret for the reCAPTCHA service. | False (i.e. disabled) |
ckanext.contact.recaptcha_v3_action |
data-module-action for the form/button |
To use reCAPTCHA, you must register a site with the Google reCAPTCHA service and add your API key and secret in the configuration.
Add the following HTML where you want the contact button to appear:
{% set params = {...} %}
<a class="btn btn-primary" data-module="modal-contact" data-module-template="{{ h.get_contact_form_template_url(params) }}" href="{{ h.url_for('contact.form', **params) }}" title="{{ _('Contact') }}">
<i class="fas fa-envelope"></i>{{ link_text if link_text else _('CONTACT BUTTON TEXT') }}
</a>
{% resource 'ckanext-contact/main' %}
Where params
is a dict with three entries: package_id, resource_id, record_id (all of which are optional).
Test coverage is currently extremely limited.
To run the tests, use nosetests inside your virtualenv. The --nocapture
flag will allow you to see the debug statements.
nosetests --ckan --with-pylons=$TEST_CONFIG_FILE --where=$INSTALL_FOLDER/src/ckanext-contact --nologcapture --nocapture