function cron_institution_data_daily() { require_once get_config('libroot') . 'registration.php'; foreach (get_column('institution', 'name') as $institution) { $current = institution_data_current($institution); $time = db_format_timestamp(time()); // Total users insert_record('institution_data', (object) array('ctime' => $time, 'institution' => $institution, 'type' => 'user-count-daily', 'value' => $current['users'])); // Logged-in users $interval = is_postgres() ? "'1 day'" : '1 day'; if ($current['users'] != 0) { $where = "lastaccess >= DATE(?) AND lastaccess < DATE(?)+ INTERVAL {$interval}"; $where .= " AND id IN (" . join(',', array_fill(0, $current['users'], '?')) . ")"; $loggedin = count_records_select('usr', $where, array_merge(array($time, $time), $current['members'])); } else { $loggedin = 0; } insert_record('institution_data', (object) array('ctime' => $time, 'institution' => $institution, 'type' => 'loggedin-users-daily', 'value' => $loggedin)); $current['name'] = $institution; graph_institution_data_daily($current); } }
function institution_statistics($institution, $full = false) { $data = array(); if ($full) { $data = institution_data_current($institution); $data['weekly'] = true; $data['institution'] = $institution; if (is_postgres()) { $weekago = "CURRENT_DATE - INTERVAL '1 week'"; $thisweeksql = "COALESCE((lastaccess > {$weekago})::int, 0)::int"; $todaysql = 'COALESCE((lastaccess > CURRENT_DATE)::int, 0)::int'; $eversql = "(NOT lastaccess IS NULL)::int"; } else { $weekago = 'CURRENT_DATE - INTERVAL 1 week'; $thisweeksql = "COALESCE(lastaccess > {$weekago}, 0)"; $todaysql = 'COALESCE(lastaccess > CURRENT_DATE, 0)'; $eversql = "NOT lastaccess IS NULL"; } if (!$data['users']) { $active = get_record_sql("SELECT 0 AS today, 0 AS thisweek, {$weekago} AS weekago, 0 AS ever"); } else { $sql = "SELECT SUM({$todaysql}) AS today, SUM({$thisweeksql}) AS thisweek, {$weekago} AS weekago, SUM({$eversql}) AS ever FROM {usr}\n WHERE id IN (" . join(',', array_fill(0, $data['users'], '?')) . ")"; $active = get_record_sql($sql, $data['members']); } $data['usersloggedin'] = get_string('loggedinsince', 'admin', $active->today, $active->thisweek, format_date(strtotime($active->weekago), 'strftimedateshort'), $active->ever); if (!$data['users']) { $data['groupmemberaverage'] = 0; } else { $memberships = count_records_sql("\n SELECT COUNT(*)\n FROM {group_member} m JOIN {group} g ON g.id = m.group\n WHERE g.deleted = 0 AND m.member IN (" . join(',', array_fill(0, $data['users'], '?')) . ")\n ", $data['members']); $data['groupmemberaverage'] = round($memberships / $data['users'], 1); } $data['strgroupmemberaverage'] = get_string('groupmemberaverage', 'admin', $data['groupmemberaverage']); if (!$data['views']) { $data['viewsperuser'] = 0; } else { $data['viewsperuser'] = get_field_sql("\n SELECT (0.0 + COUNT(id)) / NULLIF(COUNT(DISTINCT \"owner\"), 0)\n FROM {view}\n WHERE id IN (" . join(',', array_fill(0, $data['views'], '?')) . ")\n ", $data['viewids']); $data['viewsperuser'] = round($data['viewsperuser'], 1); } $data['strviewsperuser'] = get_string('viewsperuser', 'admin', $data['viewsperuser']); } $data['name'] = $institution; $data['release'] = get_config('release'); $data['version'] = get_config('version'); if ($institution == 'mahara') { $data['installdate'] = format_date(strtotime(get_config('installation_time')), 'strftimedate'); } else { // *** FIXME: See if better way to get this $data['installdate'] = format_date(strtotime(get_field_sql('SELECT MIN(ui.ctime) FROM {usr_institution} ui WHERE ui.institution = ?', array($institution))), 'strftimedate'); } if ($data['users']) { $data['diskusage'] = get_field_sql("\n SELECT SUM(quotaused)\n FROM {usr}\n WHERE deleted = 0 AND id IN (" . join(',', array_fill(0, $data['users'], '?')) . ")\n ", $data['members']); } return $data; }