/** * * test here on branch bcvincent * **/ function get_user_timeontask($userid, $debug = false) { global $DB, $CFG; // grab login times $logins = get_user_logins($userid); // used to calculate total time $sessions = new DateTime(); $now = new DateTime(); // loop login times $i = 0; foreach ($logins as $login) { // get next login in loop if ($i < sizeof($logins)) { $next_login = $logins[$i + 1]; } // build actities sql if ($next_login !== NULL) { // activities to be less then next login $activities_sql = "SELECT " . "log.timecreated " . "FROM {logstore_standard_log} log " . "WHERE " . "log.timecreated >= ? AND " . "log.timecreated < ? AND " . "log.userid = ? "; $cur_activities = $DB->get_records_sql($activities_sql, array($login->timecreated, $next_login->timecreated, $userid)); } else { $activities_sql = "SELECT " . "log.timecreated " . "FROM {logstore_standard_log} log " . "WHERE " . "log.timecreated >= ? AND " . "log.userid = ? "; $cur_activities = $DB->get_records_sql($activities_sql, array($login->timecreated, $userid)); } // calculate activities time $cur_activities = array_values($cur_activities); $first = current($cur_activities); end($cur_activities); $last = current($cur_activities); // total session time $total_time = calculate_activity_time($first->timecreated, $last->timecreated); $total_time_interval = new DateInterval($total_time); $sessions->add($total_time_interval); $i++; } unset($login); // create DateInterval $timeontask = $sessions->getTimestamp() - $now->getTimestamp(); if ($debug) { echo $timeontask; } else { return $timeontask; } }
/** * calculates users time on task * * returns integer seconds **/ function get_user_timeontask_subj($userid, $subj = NULL, $startReport = NULL, $endReport = NULL, $debug = false) { global $DB, $CFG; // grab login times if ($endReport != NULL) { $endReport += 86400; //go to the end of the day on the end day. } $logins = get_user_logins($userid, $startReport, $endReport); // used to calculate total time $sessions = new DateTime(); $now = new DateTime(); if ($subj !== NULL) { switch ($subj) { case "math": $where_items = "( "; $where_items .= "log.courseid = '12' OR "; $where_items .= "log.courseid = '13' "; $where_items .= ") AND "; break; case "science": $where_items = "( "; $where_items .= "log.courseid = '25' "; $where_items .= ") AND "; break; case "socstudy": $where_items = "( "; // $where_items .= "log.courseid = '19' "; $where_items .= "log.courseid = '19' OR "; $where_items .= "log.courseid = '2' "; $where_items .= ") AND "; break; case "language": $where_items = "( "; $where_items .= "log.courseid = '14' OR "; $where_items .= "log.courseid = '15' OR "; $where_items .= "log.courseid = '16' "; $where_items .= ") AND "; break; default: $where_items = ""; break; } } // loop login times $i = 0; foreach ($logins as $login) { // get next login in loop if ($i < sizeof($logins)) { $next_login = $logins[$i + 1]; } // build actities sql if ($next_login !== NULL) { // activities to be less then next login $activities_sql = "SELECT " . "log.timecreated " . "FROM {logstore_standard_log} log " . "WHERE " . "{$where_items}" . "log.timecreated >= ? AND " . "log.timecreated < ? AND " . "log.action <> 'loggedout' AND " . "log.userid = ? "; $temp_params = array($login->timecreated, $next_login->timecreated, $userid); $cur_activities = $DB->get_records_sql($activities_sql, $temp_params); } else { $activities_sql = "SELECT " . "log.timecreated " . "FROM {logstore_standard_log} log " . "WHERE " . "{$where_items}" . "log.timecreated >= ? AND " . "log.action <> 'loggedout' AND " . "log.userid = ? "; $temp_params = array($login->timecreated, $userid); $cur_activities = $DB->get_records_sql($activities_sql, $temp_params); } // calculate activities time $cur_activities = array_values($cur_activities); $first = current($cur_activities); end($cur_activities); $last = current($cur_activities); // total session time $total_time = calculate_activity_time($first->timecreated, $last->timecreated, $subj); $total_time_interval = new DateInterval($total_time); $sessions->add($total_time_interval); $i++; if ($debug) { var_dump($activities_sql); var_dump($temp_params); var_dump($total_time); } } unset($login); // create DateInterval $timeontask = $sessions->getTimestamp() - $now->getTimestamp(); if ($debug) { var_dump($timeontask); } else { return $timeontask; } }