Collect Grading Analytics

Query canvas for analytics on grading performance and cache it in a local database for analysis.

Signed-off-by: Seth Battis <seth@battis.net>
Return Query Results

Oy. Totally forgot to return the results of API requests from my sleek, handy, helper functions.

Signed-off-by: Seth Battis <seth@battis.net>
Safer Assumptions

Not quite sure what I was checking for before. Now it stops blowing warnings at me.

Signed-off-by: Seth Battis <seth@battis.net>
Merge branch 'refs/heads/dev-canvas-api' into dev-grading-analytics
Ignore Ungraded

Assignments marked as ungraded probably shouldn't be scored as "assignments that need to be graded".

Signed-off-by: Seth Battis <seth@battis.net>
Crontab

Scheduled automatic data collection for Fridays at midnight.

Signed-off-by: Seth Battis <seth@battis.net>
Password Protection

Because not all information should be visible to prying eyes.

Signed-off-by: Seth Battis <seth@battis.net>
Ignore Zero-point Assignments

Let's assume that those were meant to be ungraded.

Signed-off-by: Seth Battis <seth@battis.net>
Ignore Classes without Students

There are a few in the system (why? I have no idea), but they certainly shouldn't impact statistics.

Signed-off-by: Seth Battis <seth@battis.net>
Grading Turn-Around Averages Graph

Using [PHPGraphLib](http://www.ebrueggeman.com/phpgraphlib) to generate graphs of the collected data on the fly.

First graph up: a graph of all (non-zero) turn-around time averages with a "course of interest" highlighted in red.

Signed-off-by: Seth Battis <seth@battis.net>
Self-scheduling

The data-collection script will now check to see if it has been scheduled to run (on a schedule defined in config.inc.php) and will schedule itself via crontab if it is not already scheduled.

Signed-off-by: Seth Battis <seth@battis.net>
Ignore courses with no teachers

This looks like the result of independent study data being wonky in Blackbaud and polluting Canvas. He says, non judgmentally.

Signed-off-by: Seth Battis <seth@battis.net>