. // actions: // (none) // if have a snapshot, show start/end // show form to get new snapshot // snap_action // make new snapshot and go to... // map // show a map; // show form to set or change filter or breakdown // // columns: // name // type // breakdown category (if using breakdown) // nviews (as number) // outcome (as color-coded bar graph: green=next, yellow=back, red=none) // time (bar graph of log(t)) // score (bar graph) // // what's shown: // lessons: nviews, outcome, time // exercise: nviews, outcome, time, score // exercise answer: nviews, outcome, time // exercise set: score // // When breakdown is used, each of above has N lines // Total, followed by each breakdown category require_once("../inc/bolt_util_ops.inc"); require_once("../inc/bolt_db.inc"); require_once("../inc/bolt_cat.inc"); require_once("../inc/bolt.inc"); require_once("../inc/bolt_snap.inc"); // the following are to minimize argument passing $snap = null; $course_id = 0; $top_unit = null; $filter = null; $filter_cat = null; $breakdown = null; $breakdown_cat = null; function show_snap_form() { global $course_id; admin_page_head("Data snapshot"); $s = read_map_snapshot($course_id); if ($s) { $end = date_str($s->time); echo " A data snapshot exists for the $s->dur days prior to $end. "; show_button( "bolt_map.php?action=map&course_id=$course_id", "Use this snapshot", "Use this snapshot" ); } else { echo "There is currently no snapshot."; } echo "
"; admin_page_tail(); } function snap_action() { global $course_id; global $top_unit; $dur = get_int('dur'); $s = write_map_snapshot($course_id, $dur); show_map(); } function spaces($level) { $x = ""; for ($i=0; $i<$level; $i++) { $x .= " "; } return $x; } // filter arrays of anything that has a user_id field // (view, xset_result, question) // function filter_array($array) { global $snap, $filter, $filter_cat, $breakdown, $breakdown_cat; if (!$filter && !$breakdown) return $array; $x = array(); foreach ($array as $y) { if (!array_key_exists($y->user_id, $snap->users)) continue; $u = $snap->users[$y->user_id]; if ($filter && $filter->categorize($u) != $filter_cat) { continue; } if ($breakdown && $breakdown_cat) { if ($breakdown->categorize($u) != $breakdown_cat) { continue; } } $x[] = $y; } return $x; } function avg_score($array) { $sum = 0; $n = count($array); if ($n ==0) return 0; foreach ($array as $a) { $sum += $a->score; } return $sum/count($array); } function avg_time($views) { $sum = 0; $n = 0; foreach ($views as $v) { if ($v->start_time && $v->end_time) { $sum += $v->end_time - $v->start_time; $n++; } } if ($n ==0) return 0; return $sum/$n; } function outcomes($views) { $x = array(); $x[0] = 0; $x[1] = 0; $x[2] = 0; foreach ($views as $v) { switch ($v->action) { case BOLT_ACTION_NONE: $x[0]++; break; case BOLT_ACTION_NEXT: $x[1]++; break; case BOLT_ACTION_SUBMIT: $x[1]++; break; default: $x[2]++; break; } } return $x; } function get_nquestions($unit, $mode) { global $snap; if (array_key_exists($unit->name, $snap->questions)) { $a = filter_array($snap->questions[$unit->name]); $n = 0; foreach ($a as $q) { if ($q->mode == $mode) $n++; } return $n; } return 0; } function get_views($unit, $mode) { global $snap; $y = array(); if (array_key_exists($unit->name, $snap->views)) { $a = filter_array($snap->views[$unit->name]); foreach ($a as $x) { if ($x->mode == $mode) $y[] = $x; } } return $y; } function get_results($unit) { global $snap; if (array_key_exists($unit->name, $snap->results)) { return filter_array($snap->results[$unit->name]); } return array(); } function get_xset_results($unit) { global $snap; if (array_key_exists($unit->name, $snap->xset_results)) { return filter_array($snap->xset_results[$unit->name]); } return array(); } function class_name($class) { switch ($class) { case "BoltSequence": return "sequence"; case "BoltSelect": return "select"; case "BoltLesson": return "lesson"; case "BoltExercise": return "exercise"; case "BoltExerciseSet": return "exercise set"; case "BoltRandom": return "random"; } } $rownum = 0; function show_unit_row($unit, $class, $level, $is_answer) { global $breakdown, $breakdown_cat; global $rownum, $course_id; $a = $is_answer?" (answer)":""; $j = ($rownum++)%2; echo "