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' |
ckanext.contact.add_timestamp_to_subject |
Whether to append a timestamp to the subject line | false |
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 in this extension, there is a Docker compose configuration available in this repository to make it easy.
To run the tests against ckan 2.9.x on Python3:
- Build the required images
docker-compose build
- Then run the tests. The root of the repository is mounted into the ckan container as a volume by the Docker compose configuration, so you should only need to rebuild the ckan image if you change the extension's dependencies.
docker-compose run ckan
The ckan image uses the Dockerfile in the docker/
folder which is based on openknowledge/ckan-dev:2.9