/** * * 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; } }
* **/ require_once dirname(__FILE__) . '/../../config.php'; require_once dirname(__FILE__) . '/setup.php'; require_once dirname(__FILE__) . '/lib.php'; require_login(); $this_url = new moodle_url($baseurl . basename(__FILE__)); $index_url = new moodle_url($baseurl . "index.php"); $submit_url = new moodle_url($baseurl . basename(__FILE__)); $test_id = 1330; echo "<p style='border:solid 1px;'><strong>tot no subj</strong>"; var_dump(get_user_timeontask_subj($test_id, null, true)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>tot w/soc studies</strong>"; var_dump(get_user_timeontask_subj($test_id, "socstudy", true)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>format tot 2mins..</strong>"; var_dump(format_timeontask(120)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>logins</strong>"; var_dump(get_user_logins($test_id)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>phone</strong>"; var_dump(get_user_phone($test_id)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>last logged</strong>"; var_dump(get_user_lastlogged($test_id)); echo "</p>"; echo "<p style='border:solid 1px;'><strong>inactive</strong>"; var_dump(get_user_timeinactive($test_id)); echo "</p>";
/** * 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; } }
function timeontask_per_session($userid, $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. } else { $endReport = time(); //if no end date given, use current time } $logins = get_user_logins($userid, $startReport, $endReport); // used to calculate total time $sessions = new DateTime(); $now = new DateTime(); $session_array = array(); // loop login times $i = 0; $row_count = 0; $array_count = 0; $where_items = ''; foreach ($logins as $login) { // get next login in loop if ($i < sizeof($logins) - 1) { $next_login = $logins[$i + 1]; } else { $next_login = NULL; } // Find activities $activities_sql = "SELECT " . "log.id, log.timecreated, log.action, log.origin, log.courseid " . "FROM {logstore_standard_log} log " . "WHERE " . "{$where_items}" . "log.timecreated >= ? AND " . "log.timecreated < ? AND " . "log.timecreated < ? AND " . "log.target <> 'message' AND " . "log.action <> 'failed' AND " . "log.userid = ? AND " . "log.realuserid IS NULL " . "ORDER BY " . "log.timecreated "; if ($next_login !== NULL) { // if another login, use next_login's time $temp_params = array($login->timecreated, $next_login->timecreated, $endReport, $userid); } else { // if no more logins, use the endReport's time $temp_params = array($login->timecreated, $endReport, $endReport, $userid); } // Get activities $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); // check if user logged out $loggedout = false; if ($last) { if ($last->action == 'loggedout') { $loggedout = true; } // var_dump("sess"); // var_dump($loggedout); // total session time $total_time = calc_activity_time($first->timecreated, $last->timecreated, $loggedout); $total_time_interval = new DateInterval($total_time); $sessions->add($total_time_interval); } $i++; $timeontask = $total_time_interval->format("%D:%H:%I:%S"); // FIND WHERE THE STUDENT WAS WORKING $course_activity = ""; foreach ($cur_activities as $log) { if ($log->courseid != 0 && $log->courseid != 1) { $names_sql = "SELECT fullname FROM mdl_course WHERE id = {$log->courseid}"; $course_name = $DB->get_record_sql($names_sql); $course_activity .= $course_name->fullname . "<br>"; } } $course_activity = implode('<br>', array_unique(explode('<br>', $course_activity))); // BUILD TEMP ARRAY FOR RETURN $row_count++; $temparray['Record'] = $row_count; $temparray['Time'] = date("m-d-Y h:i:s a", $login->timecreated); if (!$course_activity) { $temparray['Courses'] = " "; } else { $temparray['Courses'] = $course_activity; } $temparray['Session'] = $timeontask; $temparray['first'] = $first->timecreated; $temparray['last'] = $last->timecreated; $sessions_array[] = $temparray; $array_count++; } unset($login); return $sessions_array; }