Trello admin page, roadmap #96

My trello token had expired.  I set up trello's admin form to make getting a new token a bit easier.

Reimplemented roadmap using trello as a source.  So far so good.  Still need to figure out a few things.
- Where does status come from
- Where does the title link to
- Is the odd row text thing useful?  That was awkward to code around before so I'd rather ditch it if possible.  Maybe the card body text could be in a popup instead?

New roadmap is refactored.  Originally I tried making it iwth drupal's theme system but that didn't really make sense.  I wasn't doing enough to the html structure for that to matter - everything I did was in preprocess.  Instead I kept the preprocess functions and had them call each other directly.  Much cleaner now.

This is in the trello branch.  Since I'm replacing other features and notifications these changes should be kept out of master till ready for deployment.
Minor trello roadmap.  GS and GH search for new issues.  #96

Both GH and Gs have a _newer_issues funciton that.  It works like the search function but also uses a parameter to restrict results to items with an id above a specified value.  Since ids are sequential, this gives us only the newest results and we only have to track one number per data source.

Incidentally I'm using php closures here.  I found them surprisngly likable.  ` function($i) use ($id) {return ($id < $i['number']);}`.  I would never have found `use` in the php docs, but it was in a few examples.  It let me include that $id var into the scope of the anonmymous function.  Clean.
New latest issue functions return arrays keyed by issue ids #69
Trello syncs new tickets, tracks id of newest imported ticket.  #96
Began processing trello events #96

Started logging and looking at trello events.  Caught the event for list movement.  When on the roadmap board, if a card is moved to a list whose name matches a milestone, github's milestone will be updated.

Also caught event for moving between boards.  Does not include the names of the lists, so I can't apply an engineering/bug/idea label at this point.  Instead went back and added that label at card creation time.  Still have to figure out how to tell if a GH ticket needs to be created at this point or not.
Trello roadmap gets github status #96

Trello uses the link at the top of each card to get a status from github.  Uses same logic as getsatisfaction roadmap because I didn't want to rethink it or have them behave inconsistently.

Looks like it's working, but I need to redo card creation to know for sure.  Many cards up there predate the link at the top of the page thing.

Before doing that I'd like to wrangle the formatting.  Trello cards use markdown rather than html.  I can get github flavored MD no problem, but I'm not sure what to do about topics coming from getsatisfaction.
Trello converts GS html to markdown
Trello cards coming from github use markdown #96
Roadmap status fetch optimization #96

Roadmap status comes from github.  Original implementation was naively looping over each GH id.

New implementation loops over statuses.  Each github label that represents a roadmap status gets a search, returning all its tickets.  These are cached.  Tickets whose ids are in one of these caches are marked with that label.  One api call per label (we have 6 labels) is better than one call per ticket (of which there are ~3700)
Trello roadmap is paged by milestone #96
Trello roadmap pages link to next/prev milestone #96
Trello can push labels.  #96

The labels thing was bothering me.  The api doesn't let me put the Features label on a card.  I can only put a color on a card and hope it's the right one.

I made a var mapping labels to colors.  Added a checkbox to the admin page.  Checking it will set the trello labels on the roadmap page to match the colors in the var.
Trello updates milestone after board, list movement #96
Trello pushes card assignments to github if it knows the user #96
Merge pull request #97 from openscholar/trello

Trello