Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
}