/** * Returns external backpack settings and badges from this backpack. * * This function first checks if badges for the user are cached and * tries to retrieve them from the cache. Otherwise, badges are obtained * through curl request to the backpack. * * @param int $userid Backpack user ID. * @param boolean $refresh Refresh badges collection in cache. * @return null|object Returns null is there is no backpack or object with backpack settings. */ function get_backpack_settings($userid, $refresh = false) { global $DB; require_once dirname(dirname(__FILE__)) . '/badges/lib/backpacklib.php'; // Try to get badges from cache first. $badgescache = cache::make('core', 'externalbadges'); $out = $badgescache->get($userid); if ($out !== false && !$refresh) { return $out; } // Get badges through curl request to the backpack. $record = $DB->get_record('badge_backpack', array('userid' => $userid)); if ($record) { $backpack = new OpenBadgesBackpackHandler($record); $out = new stdClass(); $out->backpackurl = $backpack->get_url(); if ($collections = $DB->get_records('badge_external', array('backpackid' => $record->id))) { $out->totalcollections = count($collections); $out->totalbadges = 0; $out->badges = array(); foreach ($collections as $collection) { $badges = $backpack->get_badges($collection->collectionid); if (isset($badges->badges)) { $out->badges = array_merge($out->badges, $badges->badges); $out->totalbadges += count($out->badges); } else { $out->badges = array_merge($out->badges, array()); } } } else { $out->totalbadges = 0; $out->totalcollections = 0; } $badgescache->set($userid, $out); return $out; } return null; }
/** * Returns external backpack settings and badges from this backpack. * * @param int $userid Backpack user ID. * @return null|object Returns null is there is no backpack or object with backpack settings. */ function get_backpack_settings($userid) { global $DB; require_once dirname(dirname(__FILE__)) . '/badges/lib/backpacklib.php'; $record = $DB->get_record('badge_backpack', array('userid' => $userid)); if ($record) { $backpack = new OpenBadgesBackpackHandler($record); $out = new stdClass(); $out->backpackurl = $backpack->get_url(); if ($collections = $DB->get_records('badge_external', array('backpackid' => $record->id))) { $out->totalcollections = count($collections); $out->totalbadges = 0; $out->badges = array(); foreach ($collections as $collection) { $badges = $backpack->get_badges($collection->collectionid); if (isset($badges->badges)) { $out->badges = array_merge($out->badges, $badges->badges); $out->totalbadges += count($out->badges); } else { $out->badges = array_merge($out->badges, array()); } } } else { $out->totalbadges = 0; $out->totalcollections = 0; } return $out; } return null; }