The Open Data Survey application.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
census [#1161] More general handling of flat csv export Aug 2, 2018
content Update insights Jul 24, 2017
docs Updates the main documentation page Aug 15, 2018
fixtures [#925] Tests for disableforyears for places Mar 3, 2017
index Add buildtime to templates to cache bust css May 10, 2017
scripts lowercase sequelize import Jun 21, 2018
tests Lint api.js Aug 2, 2018
.babelrc [#753] QuestionForm as an external script Aug 17, 2016
.bowerrc [#753] Add static assets and bower components Sep 7, 2016
.dockerignore Add more to .dockerignore May 23, 2018
.eslintrc Added flat CSV downloading option for Census (#1156) Jul 4, 2018
.gitignore [#854] Push site to AWS S3 bucket Feb 8, 2017
.gitmodules Major JavaScript cleanup Oct 23, 2013
.travis.yml Fix up env vars for Travis May 23, 2018
CHANGES.md Fix change log Sep 25, 2014
Dockerfile Reorganise Dockerfile for better caching May 24, 2018
LICENSE Add AGPL license. May 29, 2015
Makefile Fix docker push for successful master build May 23, 2018
MigrationNotes.md Clarify use of `is_index` template var. Mar 23, 2017
Procfile All app code under census directory Jun 19, 2015
README.md Added flat CSV downloading option for Census (#1156) Jul 4, 2018
bower.json [#753] Add js deps Sep 8, 2016
debug-server.js Lint and ES6ify server files. Jul 19, 2016
generate-translations.sh Generate message files Feb 21, 2014
gulpfile.js [#844] Manually add pot headers Dec 8, 2016
mkdocs.yml Change references to repo name from census to survey Jan 6, 2017
package-lock.json Add 'engine' property to package.json Aug 2, 2018
package.json Add 'engine' property to package.json Aug 2, 2018
requirements.txt [#758] Docs files and mkdocs build requirements Jul 21, 2016
server.js [#767] Update throng dependency Sep 19, 2016
settings.json.example Added flat CSV downloading option for Census (#1156) Jul 4, 2018
webpack.config.base.js [#753] Reconfigure webpack config for prod and dev Sep 22, 2016
webpack.config.development.js [#753] Reconfigure webpack config for prod and dev Sep 22, 2016
webpack.config.production.js [#753] Reconfigure webpack config for prod and dev Sep 22, 2016

README.md

Open Data Census

Travis Build Status Coverage Status

Open Data Census is a web application that supports a submission and reviews workflow to collect information on the state of open data.

Some presentation of data is supported, along with partitioning results by year.

The code base supports multiple censuses in a multi-tenant configuration, where each tenant runs a census from a subdomain.

Tenant administrators can customize parts of the app, from look and feel to key texts on various views.

Demo Site

If you want to check out what an Open Data Census site looks like we have a demo site running at:

http://demo.census.okfn.org/

Overview

See: http://census.okfn.org/

Getting started

Open Data Census is a Node.js app, running Express v4 and Postgres 9.4 for the database.

Get a local server setup with the following steps:

NOTE: If you need to prefix your commands in your local environment with sudo, then do that.

  1. Install Postgres 9.4 on your machine.
  2. Setup to appropriate credentials on Google and Facebook so they are OAuth providers for your app.
    • For Google: follow these steps and then enable the Google+ API.
      • The callBack url for Google+ API is: http://id.dev.census.org:5000/google/callback
    • For Facebook: follow these steps
      • The callBack url for Facebook is: http://id.dev.census.org:5000/facebook/callback
  3. Ensure you are running the supported version of Node.js, which is declared in the 'engines' section of package.json.
  4. Create a database with createdb opendatacensus.
  5. Add this line to your hosts file: 127.0.0.1 demo.dev.census.org global.dev.census.org id.dev.census.org system.dev.census.org.
  6. Create a local directory called opendatasurvey and move into it with cd opendatasurvey.
  7. Clone the code with git clone https://github.com/okfn/opendatasurvey ..
  8. Install the dependencies with npm install.
  9. Create a copy of settings.json.example file and name it settings.json changing any values as required.

Now we should be ready to run the server:

  1. Run the app with npm start (the server will be run on the 5000 port)
  2. Log in at http://id.dev.census.org:5000/login with your admin account (the same that was setup on the settings.json file)
  3. Load registry and config data at http://system.dev.census.org:5000/control
  4. Load the data for a specific site, e.g.: http://demo.dev.census.org:5000/admin
  5. Visit the site: http://demo.dev.census.org:5000/

Other things you can do:

  • Run the test suite with npm test
  • Check your code style with npm run lint using the eslint config /.eslintrc.

Configuration Sheets

Most of the site configuration is taken from config sheets in Google Sheets. You can use this registry sheet and its linked sheets as examples and clone them as necessary.

NOTE: Ensure your registry and all other config sheets have been published as CSV in Google Sheets (click File, Publish to the Web).

Deployment

We run deployments on Heroku. The app should run anywhere that you can run Node.js and Postgres. The important thing to remember for deployments is that the settings.json file you are using for local development is not available, and therefore you need to configure several settings via environment variables. The key settings you should ensure are set:

  • SESSION_SECRET
  • BASE_DOMAIN
  • DATABASE_URL
  • SYS_ADMIN
  • FACEBOOK_APP_ID
  • FACEBOOK_APP_SECRET
  • GOOGLE_APP_ID
  • GOOGLE_APP_SECRET

i18n For Templates and core code

When templates or strings in core code change, the translations have to be changed. Extract strings to the messages.pot file by running this command:

./node_modules/.bin/gulp pot

You will need the GNU gettext commands. See here for more information.

To update the existing .po files, run:

./node_modules/.bin/gulp update-po

To add a new language, create the directory locale/[language-code]/LC_MESSAGES and create the translation files (*.po). Alternatively, you can copy the locale/en directory to locale/[language-code] and change existing files.

To update the translations cache, run:

./node_modules/.bin/gulp compile-po

i18n For Config

Any column can be internationalised by adding another column with @locale after it. For example, the description column can be translated to German by adding a column of description@de. Only languages which have template translations created for them are valid. The locales setting in the config document can be used to restrict the number of locales available. The first locale in the list is the default locale.

Removing a user

A script is provided to remove users by provider id. Removing a user will update entries where the user is a submitter or reviewer (changing the user id to the anonymous user), then remove the user.

$ npm run anonymize_user -- <provider-id>

Use -d to perform a dry run, which will print the user id, and entry ids which will be affected (where the user is either a submitter or reviewer).

Running Tests

createdb opendatacensus_test
npm test