/** * Get all badges. * * @param int Type of badges to return * @param int Course ID for course badges * @param string $sort An SQL field to sort by * @param string $dir The sort direction ASC|DESC * @param int $page The page or records to return * @param int $perpage The number of records to return per page * @param int $user User specific search * @return array $badge Array of records matching criteria */ function badges_get_badges($type, $courseid = 0, $sort = '', $dir = '', $page = 0, $perpage = BADGE_PERPAGE, $user = 0) { global $DB; $records = array(); $params = array(); $where = "b.status != :deleted AND b.type = :type "; $params['deleted'] = BADGE_STATUS_ARCHIVED; $userfields = array('b.id, b.name, b.status'); $usersql = ""; if ($user != 0) { $userfields[] = 'bi.dateissued'; $userfields[] = 'bi.uniquehash'; $usersql = " LEFT JOIN {badge_issued} bi ON b.id = bi.badgeid AND bi.userid = :userid "; $params['userid'] = $user; $where .= " AND (b.status = 1 OR b.status = 3) "; } $fields = implode(', ', $userfields); if ($courseid != 0) { $where .= "AND b.courseid = :courseid "; $params['courseid'] = $courseid; } $sorting = $sort != '' && $dir != '' ? 'ORDER BY ' . $sort . ' ' . $dir : ''; $params['type'] = $type; $sql = "SELECT {$fields} FROM {badge} b {$usersql} WHERE {$where} {$sorting}"; $records = $DB->get_records_sql($sql, $params, $page * $perpage, $perpage); $badges = array(); foreach ($records as $r) { $badge = new badge($r->id); $badges[$r->id] = $badge; if ($user != 0) { $badges[$r->id]->dateissued = $r->dateissued; $badges[$r->id]->uniquehash = $r->uniquehash; } else { $badges[$r->id]->awards = $DB->count_records_sql('SELECT COUNT(b.userid) FROM {badge_issued} b INNER JOIN {user} u ON b.userid = u.id WHERE b.badgeid = :badgeid AND u.deleted = 0', array('badgeid' => $badge->id)); $badges[$r->id]->statstring = $badge->get_status_name(); } } return $badges; }