Volunteer database

From Free Geek Seattle

Yes, it's another database project! Whoopee!

Given the limited volunteer-hours available for hacking, koanhead has decided that we need to track volunteers and their hours more urgently than we need to track inventory (people are, after all, more important than are things.) Even though the Inventory tracking database project is way cooler.

Who

What

A webpage with the following:

  1. Secured sign-up form for new volunteers based on existing File:Volunteer application.pdf.
  2. Integration with our Mediawiki instance such that new volunteers automagically get a wiki account (and possibly accounts with our various other services. Kerberos SSO would be nice to implement...)
  3. Volunteer hours tracking, correlated with relevant Working Groups

Where

[Our GitHub] - if that link doesn't work here's the text -


http://freegeekseattle.org/wiki/index.php/Volunteer_database

How

Let's make a Mediawiki extension!

https://www.mediawiki.org/wiki/Manual:Developing_extensions

https://www.mediawiki.org/wiki/Extension_Matrix/database

Steps

Setup

alter user tables

to reflect additional information present on volunteer application

  1. alter table 'user' add column 'address' INT
  • foreign key for 'locations' table
  1. create table 'addresses' yada yada
  2. alter table 'user' add column yada yada

We COULD just add all the stuff to the user table, but I'd rather normalize on addresses at least.

create volunteer hours table

Sample table
WorkUnitid(int, primary key)userid(foreign, Users.userid)Location(foreign, Places.placeid)ProgramID (foreign, Programs.programID)DateStartTimeStopTime
113378622014040221002101

As proposed, this schema requires us to create two more tables: Places and Programs. Places is for storing address information (or other location information), as a given location could have multiple roles (vendor address, volunteer address and program location all in one? Could happen.)

Locations
placeid(int, not null, primary key)placeName (optional)addressLine1addressLine2cityID (sure, let's have yet another table just for towns, why not?)zip(ditto, I guess?)coords
99the Ole HiwayState Route 99Suite Georgia Brown4498105NULL

Programs is for storing program information, so I guess it just needs fields for ID, name and maybe description.

All these tables and the correct relations ought to add up to 3rd normal form (at least in my head), but I can't prove it.

change user signup form

Execution

ensure that Special:Listuser and friends does not leak sensitive information

  • implement as tests that fire when new data is submitted: build the relevant Special: pages and check them for the contents of selected fields
    • also to make sure the data we want is displayed of course :^)

build volunteer hours tracking form and associated reports

probably some other things