Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
253 commits
Select commit Hold shift + click to select a range
eb3d45d
Log error
Aug 1, 2022
f8e0657
Fix error with 1 or 2 proccesors
Aug 1, 2022
3df4375
Fix line
Aug 1, 2022
5a7d2e5
Fix test after adding new name restrictions in ODK Tools
Aug 2, 2022
8a8b353
Wait a bit longer in slower machines
Aug 3, 2022
472af41
Add local celery for testing
Aug 3, 2022
90efee3
Fix typos
Aug 5, 2022
29a577e
Test tabs and other chars in data
Aug 5, 2022
593f69b
Report request processing time if necessary
Aug 6, 2022
0ade6f9
Use latest ODKToMySQL
Aug 8, 2022
aed1acc
Start changing check access
Aug 8, 2022
c75bf98
Fix performance issues with big list of projects
Aug 10, 2022
c7641ca
Final ajustments in project list
Aug 11, 2022
0934fac
Update languages
Aug 11, 2022
2347c55
Bump stable to 2.18.0. Optimize imports
Aug 11, 2022
3cfac26
Inform user when importing testing data into a repository if the form…
Aug 12, 2022
4ff24b4
Fix user pulling projects
Aug 14, 2022
46d2611
Review install from sources
Aug 15, 2022
dfd5f16
Update steps
Aug 15, 2022
d1282fc
New notes
Aug 16, 2022
437c41d
Update instructions
Aug 17, 2022
b023109
Update instructions
Aug 17, 2022
897ff04
Few changes. Add CONTRIBUTING.md
Aug 21, 2022
3bc2243
Change name of some tool
Sep 24, 2022
e8c7605
Report the real number of submissions
Sep 24, 2022
3016d9c
Fix title
Sep 24, 2022
b7dc8bf
Control the max number of submissions during testing
Sep 24, 2022
ea79e7b
Control number of test submissions or cases
Sep 24, 2022
35b60cc
Update translations
Sep 24, 2022
c9aa818
Restore example
Sep 24, 2022
7eb94b1
Add new utility to decode an ODK Collect QR
Oct 15, 2022
bb3fbb9
Add Apache module configuration script
Oct 15, 2022
517b6fa
Fix number of threads
Oct 15, 2022
71445bf
Fix control max in testing
Oct 15, 2022
eb8e977
Black
Oct 15, 2022
f2190bd
Update gitignore
Oct 15, 2022
739045c
Add query fields
Oct 17, 2022
2d03a42
Fix typos in docs
Oct 17, 2022
89f237e
Allow more than one plugin to extend IRegistration.after_register
Oct 17, 2022
6aa2939
Specify extension points.
Oct 18, 2022
52d9a91
New functions for query
Oct 19, 2022
0128dc7
Fix the data going into ES to avoid indexing plugin data
Oct 19, 2022
69df0fb
Fix the data going into ES to avoid indexing plugin data
Oct 19, 2022
2321347
Fix bug
Oct 19, 2022
1d05ff0
Fix user search with spaces
Oct 19, 2022
1812226
Add ICollaborator
Oct 25, 2022
f2dfae6
Add query functions
Oct 25, 2022
43d4d01
Add extension points to collaborators
Oct 25, 2022
747ae8e
Allow dictionary access to members
Oct 25, 2022
2c11f97
Allow extension plugins in Celery
Oct 26, 2022
cd6cc47
Add extension point in the repository celery task
Oct 26, 2022
52e42ef
Allow multiple extensions
Oct 26, 2022
8d5312a
Go to project details after creating a project
Oct 26, 2022
42d1376
Move extension point
Oct 26, 2022
a478e74
Finish IProject interface
Oct 26, 2022
37e3e77
Don't always get stats
Oct 28, 2022
afa9e64
Add comments on error functions
Oct 29, 2022
7c11b3a
Update in collaborator extension points
Oct 29, 2022
5095e72
Don't fail if plugin fail
Oct 31, 2022
20d4ac3
Fix some bugs
Oct 31, 2022
a5ac9b7
Upgrade dockers
Oct 31, 2022
9416d6f
Check why CI fails
Oct 31, 2022
c2cb15a
Fix versions for Node Apps
Oct 31, 2022
d4a8ca2
Remove prints
Oct 31, 2022
0d9b853
Upgrade libraries
Nov 1, 2022
dc4e17f
Fix version of npm packages
Nov 1, 2022
9a409ce
Fix emoji migration
Nov 1, 2022
9316ea2
Bump stable to 2.20.0
Nov 1, 2022
3ce4654
Update translations
Nov 1, 2022
b354008
Fix error messages
Nov 4, 2022
2b7c4f9
Separate plugin loaders between Celery and FormShare
Nov 4, 2022
3f46804
Wait for ES
Nov 4, 2022
b6d098e
Upgrade cryptography
Nov 5, 2022
af53a0a
Add API secret to assistants
Nov 10, 2022
f62cc85
Fix testing
Nov 10, 2022
0dec113
Remove current API calls. Optimize imports
Nov 11, 2022
42bbaf7
Remove current API calls. Optimize imports
Nov 11, 2022
f9a91a1
Rewrite core API before creating API
Nov 13, 2022
c4da368
Don't email token generation
Nov 17, 2022
b206bb3
User API ready
Nov 17, 2022
6b380a0
Implement assistant API
Nov 17, 2022
32708bd
Allow error log pagination using API
Nov 17, 2022
a59962a
Remove more keys in API
Nov 17, 2022
f5f9956
Get token for active users
Nov 19, 2022
54cad86
Allow to call ODK Collect Routes using API
Nov 19, 2022
4586488
Return 403 for unauthorized assistant access
Nov 28, 2022
6b8b574
Fix downloads using API
Nov 28, 2022
0f634dc
black
Nov 28, 2022
50db354
Update CSV will update lookup table
Dec 1, 2022
698e70b
Fix search selects. Add tests
Dec 3, 2022
0802afb
black
Dec 3, 2022
f88b5d4
Update cI
Dec 3, 2022
5d02bdb
Bump stable to 2.21.0
Dec 3, 2022
e0cca30
Use latest ODK tools
Dec 3, 2022
5cd99be
Update translations
Dec 3, 2022
9a422a3
ES translation
Dec 3, 2022
ada40e3
CITATION file
Dec 14, 2022
7824a0c
Few more functions for remote SQL
Dec 17, 2022
ecf6d6e
Bump stable to 2.22.0
Dec 17, 2022
306f2c0
Merge branch 'master-2.0' of github.com:qlands/FormShare into master-2.0
Dec 17, 2022
07ce4ee
Bump certifi
Dec 17, 2022
aec4f01
New function for new extraction method
Dec 17, 2022
224449f
Update extraction method
Dec 19, 2022
ac9b254
Upgrade docker image to Ubuntu server 22.04
Dec 19, 2022
b2fdd7f
Use new image
Dec 19, 2022
d568582
Upgrade to Ubuntu 22.04
Dec 19, 2022
e66d996
Update version message
Dec 19, 2022
72ec840
Bump stable to 2.23.0
Dec 19, 2022
1a16872
Update translations
Dec 20, 2022
e798a27
Remove any so code is compatible with python 3.8
Dec 20, 2022
b7d2102
Update steps
Dec 20, 2022
d332228
Add support for GeoJSON
Dec 25, 2022
de19e52
Add GeoJSON in tests. Add rowidex as readonly fields
Dec 27, 2022
ae58b41
Add start-geopoint to list of geo variables
Dec 28, 2022
4443f4e
Update docker images
Dec 28, 2022
ab5d283
Implement IUserPassword
Jan 3, 2023
3f3b169
Bump stable to 2.24.0
Jan 4, 2023
8825494
New GPS extraction
Jan 28, 2023
0f8fdb4
Update CI image
Jan 28, 2023
4a6b766
Bump stable to 2.25.0
Jan 28, 2023
ff3c9a8
Update messages
Jan 28, 2023
9d9d33f
Update future
Jan 28, 2023
0a8eb52
Update future and protobuf
Jan 28, 2023
706a7f4
Upgrade JQuery
Feb 17, 2023
135cc1e
Fix some issues with forms
Feb 17, 2023
2abca92
Update bootstrap
Feb 17, 2023
f98d690
Update CI
Feb 17, 2023
6d7287e
Fix test case ID
Feb 18, 2023
c6e0fe9
Add ephemeral JS
Feb 26, 2023
b36a2f2
Add ephemeral JS
Feb 26, 2023
8a3ce10
Add support for securing JS code
Feb 27, 2023
2bdcafe
Fix IProject interface
Mar 7, 2023
cd65b9c
Move plugin call to the end
Mar 8, 2023
4fcb1bf
Update ODK Tools
Mar 27, 2023
772f841
Allow fast membership of assistants into groups
Mar 29, 2023
866cd8f
Fix list of projects. Allow easy access to assistants and groups
Mar 29, 2023
2834738
Bump stable to 2.26.0
Mar 30, 2023
4437bf3
Update translations
Mar 30, 2023
04c6513
Update redis
Mar 30, 2023
e38d3f9
Allow upload assistants from CSV
Apr 3, 2023
6435ec4
Test asistants CSV
Apr 3, 2023
dc5dbcf
Fix bug if tmp does not exist
Apr 3, 2023
40ee44c
Bump Redis to 4.4.4
Apr 3, 2023
680991d
Fix bug with PURGE logs in AWS RDS
Apr 4, 2023
d82e625
Merge branch 'stable-2.26.0' into master-2.0
Apr 4, 2023
c867065
Allow to extend project forms
Apr 30, 2023
7661a3e
Add the QLands website
Apr 30, 2023
20bb5f4
Update translations
Apr 30, 2023
ede48ac
Case creator needs a date
May 2, 2023
7836055
Allow complex languages
May 15, 2023
dbecb24
Fix assistant access
May 15, 2023
28a1b15
Test multi-language
May 15, 2023
8b50fb8
Update ODK Tools
May 15, 2023
b46d3d6
Use ODKTools 2.4
May 15, 2023
b6150ed
Report data columns
May 21, 2023
7f816c2
Filter columns
May 22, 2023
244da0e
Add new cols in dictionary
May 26, 2023
90e8779
Not pull cases without name
May 29, 2023
4a2de7e
Add new dictionary fields
Jun 7, 2023
da54345
New tools to extract files
Jun 8, 2023
4a33240
Work in data fields
Jun 8, 2023
79a3bb2
Merge branch 'stable-2.26.0' into master-2.0
Jun 9, 2023
0118d16
Update README.md
Jun 13, 2023
f44e649
Allow data columns when creating the repository
Jun 13, 2023
059f05e
Work in field metadata
Jun 13, 2023
a6c6991
More work on data columns
Jun 14, 2023
61c6b59
Editable dictionary field metadata
Jun 14, 2023
d0ecb1c
Add data columns to tests
Jun 15, 2023
bb5e0a6
Fix few bugs with data columns
Jun 15, 2023
18834a6
Fix code to match new ODK Tools version
Jun 17, 2023
b1083ab
Fix merge with data columns
Jun 23, 2023
5f7683b
Adapt merge to support data columns
Jun 25, 2023
2e35e4e
Merge branch 'master-2.0' of github.com:qlands/FormShare into master-2.0
Jun 25, 2023
1ba5d22
Update tests
Jun 25, 2023
34cc1e4
New interfaces to allow data encryption
Jul 12, 2023
1584992
Add can project and form in users
Jul 20, 2023
c629cd6
Fix login redirection. Use new user fields
Jul 21, 2023
211e88c
Use new user fields
Jul 22, 2023
a6e3870
Allow extend super tools
Jul 22, 2023
70795ee
Update language. Add UK
Jul 23, 2023
1364923
Update interface docs
Jul 23, 2023
8f60c4e
Update translations
Jul 23, 2023
6cbc43c
Bump stable to 2.27.0
Jul 23, 2023
4badf29
Allow to expand central logo
Jul 27, 2023
0dcd379
Add initial support formshare_unique
Jul 27, 2023
4e1636e
Fix few bugs with data tables
Jul 27, 2023
09791c8
Fix few bugs with data tables
Jul 28, 2023
a3a160f
Update CI
Jul 28, 2023
8e366b2
Update libraries. Add uk language option
Jul 30, 2023
c350bc9
Fix bug with new survey fields
Jul 30, 2023
0f61133
Fix merge case from v2.26 to v2.27
Jul 31, 2023
7661d53
Fix bug in merge form
Aug 11, 2023
62b0281
Update CI image
Aug 11, 2023
19f1c33
Change owner in CI
Aug 11, 2023
a34388e
Fix redis start
Aug 11, 2023
c2dc532
Use a new CI recipe
Aug 11, 2023
bf033d2
Add missing headers for Enketo
Aug 13, 2023
e446f0d
Small bug fix
Aug 15, 2023
b51a11a
Fix MySQL
Sep 4, 2023
bd2a170
Fix Redis under new Ubuntu image
Sep 4, 2023
0ace748
Add RawSubmission interface
Sep 4, 2023
bda6323
Add new extension block
Sep 4, 2023
1b865e5
Allow change QR settings
Sep 6, 2023
0fe63e6
Add extra info
Sep 11, 2023
58eb76f
Bump stable to 2.28.0
Sep 11, 2023
301e9ae
Allow edit an assistant in the form details
Sep 23, 2023
04e0bf4
Members now can generate exports. This aligns access with the analyti…
Sep 24, 2023
d4b447a
Update some libraries
Sep 24, 2023
7cd10bd
Bump stable to 2.29.0
Sep 24, 2023
7652828
Bump stable to 2.29.1
Oct 1, 2023
517dad2
ThThis fixes issue #71
Oct 4, 2023
8fe08ea
Update dockers
Oct 5, 2023
2470003
Fix update case creator
Oct 5, 2023
7394386
Update CI image
Oct 5, 2023
d2f5228
Fix page
Oct 5, 2023
c2df072
Merge branch 'stable-2.29.1' into master-2.0
Oct 5, 2023
05ce92a
Update ODK tools base to 2.6
Oct 5, 2023
3b48883
Bump stable to 2.30.0
Oct 5, 2023
470dfbd
Upgrade pillow
Oct 5, 2023
0fb9b49
Use latest ODK base
Oct 5, 2023
4c26413
Fix Avatar with pillow 10
Oct 6, 2023
a9e3a35
Update urllib
Oct 6, 2023
34da305
Report same sbumission in logs
Nov 2, 2023
8c752b4
Disable cache for any file download
Nov 2, 2023
cdacfc6
Bump stable to 2.30.1
Nov 3, 2023
c6aeefd
Fix form import problems with single and double quotes
Nov 4, 2023
a5e9181
Report multiple errors in files
Nov 4, 2023
cabea1a
Merge branch 'stable-2.30.1' into master-2.0
Nov 4, 2023
aa94de7
Adapt code for ODKTools 2.7
Nov 8, 2023
828d1d9
Update images for ODK Tools 2.7
Nov 8, 2023
e7148cc
Update translations
Nov 9, 2023
560c9e7
Bump stable to 2.31.0
Nov 9, 2023
862cf38
Remove support for or_other in selects.
Nov 15, 2023
6cb83d5
Update CI image
Nov 15, 2023
2a031c4
Bump stable to 2.32.0
Nov 18, 2023
056110f
Set autoupdate by default in QR settings
Nov 26, 2023
2e4e7d3
Fix bug with merge with old forms
Nov 26, 2023
7d36d7c
Black code
Nov 26, 2023
8c79e65
Format XLS output
Feb 12, 2024
c4e7a74
Use latest ODK Tools 2.10
Feb 12, 2024
1eb46fc
Update dependencies
Feb 12, 2024
5fac13e
Bump stable to 2.33.0
Feb 14, 2024
0ac9738
Generate realtime CSV is a submission in logs has been fixed
Feb 17, 2024
4a30e69
Use case creator history
Feb 18, 2024
19b31a4
Don't format int variables if only descriptions are indicated
Feb 26, 2024
24cb385
Fix networking config in docker compose file
istride Mar 12, 2024
25c0d29
This fix several issues with updating CSV files when a form has a rep…
Mar 26, 2024
b7e0d46
Upgrade black and cryptography. Black code
Mar 26, 2024
80ccdfa
Merge pull request #79 from istride/fix-docker-compose
Mar 26, 2024
1139400
Introduce Docker Compose env file
istride Mar 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
24 changes: 20 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
version: 2
jobs:
py-3.8: &build-template
py-3.10: &build-template
docker:
- image: qlands/odktools_circleci:20220727
- image: qlands/odktools_circleci:20240210
- image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
environment:
- bootstrap.memory_lock=true
Expand Down Expand Up @@ -34,15 +34,31 @@ jobs:
- run:
name: Run servers
command: |
sudo chown -R redis /etc/redis
sudo chgrp -R redis /etc/redis
sudo chown -R redis /var/log/redis
sudo chgrp -R redis /var/log/redis
sudo chown -R redis /var/lib/redis
sudo chgrp -R redis /var/lib/redis
sudo /etc/init.d/redis-server start
sudo service mongodb start
sudo mongod --fork --pidfilepath /var/run/mongod.pid --logpath /var/log/mongodb/mongod.log --config /etc/mongod.conf
sudo service mosquitto start
tail -f /dev/null
background: true
- run:
# Install dependencies with --user to enable easier caching
name: Install dependencies
command: |
sudo chown -R circleci /opt/formshare_repository
sudo chown -R circleci /opt/formshare_log
sudo chown -R circleci /opt/formshare_celery
sudo chown -R circleci /opt/formshare_gunicorn
sudo chown -R circleci /opt/formshare_config
sudo chgrp -R circleci /opt/formshare_repository
sudo chgrp -R circleci /opt/formshare_log
sudo chgrp -R circleci /opt/formshare_celery
sudo chgrp -R circleci /opt/formshare_gunicorn
sudo chgrp -R circleci /opt/formshare_config
pip install -r requirements.txt --user
pip install codecov --user
/home/circleci/.local/bin/codecov
Expand Down Expand Up @@ -100,4 +116,4 @@ workflows:
version: 2
build:
jobs:
- py-3.8
- py-3.10
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ lib64/
parts/
sdist/
var/
formshare/static/ephemeral/*.js
wheels/
*.egg-info/
.installed.cfg
Expand All @@ -30,6 +31,7 @@ MANIFEST
tmp/
.directory
docker/
tryouts/

# PyInstaller
# Usually these files are written by a python script from a template
Expand Down
16 changes: 16 additions & 0 deletions Apache_configuration/module_changes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
cd /etc/apache2/mods-enabled
ln -s ../mods-available/cache.load .
ln -s ../mods-available/cache_socache.load .
ln -s ../mods-available/headers.load .
ln -s ../mods-available/lbmethod_byrequests.load .
rm mpm_event.conf
rm mpm_event.load
ln -s ../mods-available/mpm_prefork.conf .
ln -s ../mods-available/mpm_prefork.load .
ln -s ../mods-available/proxy.conf .
ln -s ../mods-available/proxy.load .
ln -s ../mods-available/proxy_http.load .
ln -s ../mods-available/rewrite.load .
ln -s ../mods-available/socache_shmcb.load .
ln -s ../mods-available/ssl.conf .
ln -s ../mods-available/ssl.load .
9 changes: 9 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cff-version: 1.1.0
message: "If you use this software, please cite it as below."
authors:
- family-names: Carlos
given-names: Quiros
orcid: https://orcid.org/0000-0002-9485-9961
title: qlands/FormShare: Stable 2.21.0
version: 2.21.0
date-released: 2022-12-14
28 changes: 28 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# How to contribute to FormShare

The best way to contribute to FormShare is by testing it and posting issues or new features. If you can fix things or can write new features do the following:

1. Fork FormShare
2. Clone your fork in your local computer
3. Create a branch for your fix **based on the master branch**
4. Create the fix, commit the code, and push the branch to your forked repository
5. Create a pull request

We also appreciate and need translation files.

## Localization

FormShare comes out of the box in English, Spanish, French, and Portuguese. It uses Babel for translation and you can help us by creating new translations or by correcting an existing one.

To generate a new translation:

```
$ cd formshare
$ python setup.py init_catalog -l [new_language_ISO_639-1_code]
$ python setup.py extract_messages
$ python setup.py update_catalog
```

The translation files (.po) are available at formshare/locale/[language-code]/LC_MESSAGES. You can edit a .po file with tools like [PoEdit](https://poedit.net/download), [Lokalize](https://userbase.kde.org/Lokalize), [GTranslator](https://gitlab.gnome.org/GNOME/gtranslator), or a simple text editor. Once the translation is done you can send us the updated or new .po file as an issue and we will add it to FormShare.

##
173 changes: 99 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![CircleCI](https://circleci.com/gh/qlands/FormShare/tree/master-2.0.svg?style=shield&circle-token=:circle-token)](https://circleci.com/gh/qlands/FormShare)
[![CircleCI](https://circleci.com/gh/qlands/FormShare/tree/master-2.0.svg?style=shield)](https://circleci.com/gh/qlands/FormShare)
[![Codecov](https://codecov.io/github/qlands/FormShare/branch/master-2.0/graph/badge.svg)](https://app.codecov.io/gh/qlands/FormShare/commits?page=1)
[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)

Expand All @@ -25,59 +25,87 @@ FormShare **is for organizations** to install it in their server or cloud servic

## Features

**Current features**

- Case management (Longitudinal data collection) (Version >= 2.8.0)
- Using the Official ODK Collect App
- Intelligent work flow using Official ODK standards:
- Case creator forms will create cases.
- Follow-up forms will attach information to each case.
- Deactivate forms will deactivate cases. For example, a household that decides to exit a longitudinal study will not appear in follow-up forms after deactivation.
- Activate forms will activate cases again. For example, a household that decides to re-enter a longitudinal study will appear again in follow-up forms after activation.
- Move information from case creator forms into follow-up, deactivation and activation forms. For example, the sex of a participant (e. g., female) could be used in follow-up case forms to ask specific questions according to sex (e. g., if female, do they have access to reproductive health services since our last visit?)
- Support multiple time zones:
- FormShare's: This is the time zone of the Linux server running FormShare.
- User: This is the time zone of a user logged into FormShare.
- Project: Each project can have a different time zone. This should be the time zone where submissions happen.
- Assistant: This is the time zone of an assistant logged into FormShare.
- Partner: This is the time zone of a partner logged into FormShare.

- User accounts and management
- Group-based user permissions
- Projects to organize users, permissions, and forms
- Separate access for data collectors and data cleaners. This is useful when dealing with hundreds of data collectors that do not need a FormShare user access
- Separate access for partners: Partners are trusted individuals outside your organization that require access to products and other resources in FormShare to collaborate with you. For example, a professor at a university (a partner in your project) requiring a KML export to match GPS points with weather data.
- User collaborations at project level, e. g., you can allow a colleague to maintain certain aspects of your project.
- Form and submission management
- With easy setup of ODK Collect Projects using QR images
- With support for form version updates
- With testing and production stages
- Showing structural changes between incremental versions.
- With form and submission multimedia or data attachments
- With a table preview of submission data (even with thousand or millions of records) allowing in-table edits and recording any changes made to the data
- OData live data feed for analysis with tools like Excel and Power BI. **With all CRUD operation supported (e. g., update)**. You can even use [Excel](https://github.com/qlands/MrBot-OData-Add-In) to clean data.
- Extensibility system, e. g., You can write extensions to connect FormShare with Microsoft 365 authentication system
- Documentation for running on AWS using Docker
- Data cleaning API integration with R, STATA, or SPSS
- Real-time map visualization of geo-referenced submissions at project and form level
- Fill out forms using the web browser through [Enketo](https://github.com/qlands/formshare_enketo_plugin)
- Download form attachments
- Filtering submissions by submission metadata (e. g., date and time received on server)
- Parse submissions into database tables. FormShare will create a MySQL data repository to store your data
- The repository is controlled with a primary key e. g., Farmed ID
- Duplicated submissions go to a cleaning pipe-line system that makes it easier to compare submissions and decide what to do with the duplicates
- Private and publishable data downloads in Excel and CSV formats
- Mark data fields as sensitive to exclude them from publishable products
- Version control on products, e. g., FormShare will let you know if a data export does not have the latest submissions or changes in the database
- Make publishable products publicly available knowing that sensitive fields are excluded automatically
- Download geo-referenced information in KML format

**Short-term features:**

- Graph visualization with dashboards.
- Connecting data fields with ontological variables. This is useful when comparing variables across studies even if variable names are different
- Real-time data aggregation (pull data from different forms into one common data bucket). This is useful when dealing with slightly different forms for different geographies but where that certain fields could be aggregated into a common pot for analysis
- Real-time data cleaning scripts using R
### Case management (Longitudinal data collection) (Version >= 2.8.0)

- Using the Official ODK Collect App.
- Intelligent workflow using Official ODK standards:
- Case creator forms will create cases.
- Follow-up forms will attach information to each case.
- Deactivate forms will deactivate cases. For example, a household that decides to exit a longitudinal study will not appear in follow-up forms after deactivation.
- Activate forms will activate cases again. For example, a household that decides to re-enter a longitudinal study will appear again in follow-up forms after activation.
- Move information from case creator forms into follow-up, deactivation, and activation forms. For example, the sex of a participant (e. g., female) could be used in follow-up case forms to ask specific questions according to sex (e. g., if female, do they have access to reproductive health services since our last visit?)

### Support for multiple time zones

FormShare can produce dates and times in the following time zones:

- FormShare: This is the time zone of the Linux server running FormShare.
- User: This is the time zone of a user logged into FormShare.
- Project: Each project can have a different time zone. This should be the time zone where submissions happen.
- Assistant: This is the time zone of an assistant logged into FormShare.
- Partner: This is the time zone of a partner logged into FormShare.

### User and project management

- User accounts and management.
- Group-based user permissions.
- Projects to organize users, permissions, and forms.
- Separate access for data collectors and data cleaners. This is useful when dealing with hundreds of data collectors that do not need a FormShare user's account.
- Separate access for partners: Partners are trusted individuals outside your organization that require access to products and other resources in FormShare to collaborate with you. For example, a professor at a university (a partner in your project) requires a KML export to match GPS points with weather data.
- User collaborations at a project level, e.g., you can allow a colleague to maintain certain aspects of your project.

### Form and submission management

- Easy setup of ODK Collect Projects using configurable QR images.
- Support for form version updates.
- With testing and production stages.
- Showing structural changes between incremental versions.
- With form and submission multimedia or data attachments.
- Table preview of submission data (even with thousands or millions of records) allowing in-table edits and recording any changes made to the data.
- Fill out forms using the web browser through [Enketo](https://github.com/qlands/formshare_enketo_plugin).
- Real-time map visualization of geo-referenced submissions at project and form levels.
- Download form attachments.

### Database management and interoperability

- Parse submissions into database tables. FormShare will create a MySQL data repository to store your data.
- The repository is controlled with a primary key e.g., Farmed ID.
- Duplicated submissions go to a cleaning pipeline system that makes it easier to compare submissions and decide what to do with the duplicates.
- Filtering submissions by submission metadata (e.g., date and time received on server).
- Data cleaning API integration with R, STATA, or SPSS.
- OData real-time data feed for analysis with tools like Excel and Power BI. **With all CRUD operations supported (e. g., update)**. You can even use [Excel](https://github.com/qlands/MrBot-OData-Add-In) to clean data.
- Data dictionary with personal information protection.

### Product management

- Private and publishable data downloads in Excel, CSV, and JSON formats.
- Publishable products exclude protected fields (personal information protection) automatically.
- Version control on products, e.g., FormShare will let you know if a data export does not have the latest submissions or changes in the database.
- Download geo-referenced information in KML format.

### Performance, concurrency, and parallelism

Though FormShare with the default settings can handle a load that would fit most organizations, it can be configured to handle any load. FormShare has been tested, using [JMeter](https://jmeter.apache.org/), under extreme traffic (1000 parallel submissions ) in an eight years old laptop with 16 GB of RAM and an [i7-4712HQ](https://www.intel.com/content/www/us/en/products/sku/78932/intel-core-i74712hq-processor-6m-cache-up-to-3-30-ghz/specifications.html).

- Each submission is transactional. This means that a submission is either processed completely or thoroughly discarded for ODK Collect to re-send it.
- Under extreme traffic, FormShare can store a complex survey like [RHoMIS](https://www.rhomis.org/) at 18 submissions per second with zero failures.
- Data exports support concurrent processing. A survey like RHoMIS with 100,000 submissions and millions of rows would take less than a minute to export to JSON or CSV.
- The performance of the user interface or the data cleaning interface is not affected by the number of submissions.

### Analytics

- Real-time analytics from R using the [FormShare R Package](https://cran.r-project.org/web/packages/FormShare/index.html).
- Real-time analytics from platforms like [Tableau](https://public.tableau.com/en-us/s/) and [Power BI](https://powerbi.microsoft.com/en-us/) using the [FormShare OData extension](https://github.com/qlands/formshare_odata_plugin).

### Extensibility and others

- Extensibility system, e.g., You can write extensions to connect FormShare with Microsoft 365 authentication system. See a list of extensions [below](#Customization-and-Extension).
- Documentation for running on AWS using Docker.
- Data fields tagged with ontological codes. This is useful when comparing variables across studies even if variable names are different.

### Future features

- Real-time data aggregation (pull data from different forms into one common data bucket). This is useful when dealing with slightly different forms for different geographies but where that certain fields could be aggregated into a common pot for analysis.

ScreenShot
----------
Expand All @@ -86,11 +114,13 @@ ScreenShot

Releases
------------
The current stable release is 2.17.0 and it is available [here](https://github.com/qlands/FormShare/tree/stable-2.17.0)
The current stable release is 2.33.0 and it is available [here](https://github.com/qlands/FormShare/tree/stable-2.33.0)

The database signature for stable 2.17.0 is 0e3e192833a9
The database signature for stable 2.33.0 is 1903afedb92d

The Docker image for stable 2.17.0 is 20220728
The Docker image for stable 2.33.0 is 20240213

Requires ODKTools [2.10](https://github.com/qlands/odktools/tree/stable-2.10)

Installation
------------
Expand All @@ -110,9 +140,9 @@ sudo apt-get install -y docker-compose

# Get the Docker Compose file
cd /opt
sudo mkdir formshare_docker_compose_20220728
cd formshare_docker_compose_20220728
sudo wget https://raw.githubusercontent.com/qlands/FormShare/stable-2.17.0/docker_compose/docker-compose.yml
sudo mkdir formshare_docker_compose_20240213
cd formshare_docker_compose_20240213
sudo wget https://raw.githubusercontent.com/qlands/FormShare/stable-2.33.0/docker_compose/docker-compose.yml

# Make the directory structure for FormShare
sudo mkdir /opt/formshare
Expand All @@ -129,27 +159,22 @@ mkdir /opt/formshare/formshare_odata_webapps
mkdir /opt/formshare/elasticsearch
mkdir /opt/formshare/elasticsearch/esdata
mkdir /opt/formshare/elasticsearch/esdata2
mkdir /opt/formshare/elasticsearch/esdata3
sudo chmod -R g+w /opt/formshare

# Set enough memory for Elasticsearch
sudo sysctl -w vm.max_map_count=262144
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.d/60-vm-max_map_count.conf

# Download all the required Docker Images
cd /opt/formshare_docker_compose_20220728
cd /opt/formshare_docker_compose_20240213
sudo docker-compose pull

# Edit the docker-compose.yml file to set the MySQL root and FormShare admin passwords
sudo nano /opt/formshare_docker_compose_20220728/docker-compose.yml
# Press Alt+Shit+3 to show the line numbers in Nano

Edit line 10: Change the root password from "my_secure_password" to your password
Edit line 67: Change the root password from "my_secure_password" to the same password of line 10
Edit line 68: Change the admin user name (optional)
Edit line 69: Change the admin email address
Edit line 70: Change the admin user password from "my_secure_password" to your password
Edit line 75: Change the IP address for the IP address of the machine running the Docker service
# Set environment variables. Make sure to change the following:
# MYSQL_PASSWORD
# FORMSHARE_ADMIN_EMAIL
# FORMSHARE_ADMIN_PASSWORD
sudo wget -O .env https://raw.githubusercontent.com/qlands/FormShare/stable-2.33.0/docker_compose/env.example
sudo nano .env

# Save the file with Ctlr+o Enter . Exit with Ctrl+x

Expand Down Expand Up @@ -189,7 +214,7 @@ sudo service apache2 start
# Subsequent start will take about 2 minutes. You can check the status with "sudo docker stats".
# FormShare will be ready for usage when the container reaches more than 500 kB of MEM USAGE
# This is the only two commands you need to start FormShare after a server restart
cd /opt/formshare_docker_compose_20220728
cd /opt/formshare_docker_compose_20240213
sudo docker-compose up -d

# Browse to FormShare
Expand Down Expand Up @@ -465,4 +490,4 @@ The translation files (.po) are available at formshare/locale/[language-code]/LC

FormShare is released under the terms of the GNU Affero General Public License.

The plug-in mechanism since it is based on PyUtilib is covered by a [BSD type of license](https://github.com/PyUtilib/pyutilib/blob/master/LICENSE.txt).
The plug-in mechanism since it is based on PyUtilib is covered by a [BSD type of license](https://github.com/PyUtilib/pyutilib/blob/master/LICENSE.txt).
3 changes: 1 addition & 2 deletions alembic/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
from logging.config import fileConfig

from alembic import context
from sqlalchemy import engine_from_config, pool

from formshare.models.meta import Base
from sqlalchemy import engine_from_config, pool

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Create Date: 2018-11-18 08:39:19.845537

"""

import sqlalchemy as sa

from alembic import op
Expand Down
Loading