/** * Validates form data */ public function validation($data, $files) { global $DB; $errors = parent::validation($data, $files); $check = new stdClass(); $check->backpackurl = $data['backpackurl']; $check->email = $data['email']; $bp = new OpenBadgesBackpackHandler($check); $request = $bp->curl_request('user'); if (isset($request->status) && $request->status == 'missing') { $errors['email'] = get_string('error:nosuchuser', 'badges'); } return $errors; }
$reason = get_string('error:requesttimeout', 'badges'); } else { $reason = get_string('error:requesterror', 'badges', $curl->errno); } badges_send_response('failure', $reason); } $data = json_decode($result); if (!isset($data->status) || $data->status != 'okay') { $reason = isset($data->reason) ? $data->reason : get_string('error:connectionunknownreason', 'badges'); badges_send_response('failure', $reason); } // Make sure email matches a backpack. $check = new stdClass(); $check->backpackurl = BADGE_BACKPACKURL; $check->email = $data->email; $bp = new OpenBadgesBackpackHandler($check); $request = $bp->curl_request('user'); if (isset($request->status) && $request->status == 'missing') { $reason = get_string('error:backpackemailnotfound', 'badges', $data->email); badges_send_response('failure', $reason); } else { if (empty($request->userId)) { $reason = get_string('error:backpackdatainvalid', 'badges'); badges_send_response('failure', $reason); } else { $backpackuid = $request->userId; } } // Insert record. $obj = new stdClass(); $obj->userid = $USER->id;
$obj->collectionid = (int) $group; if (!$DB->record_exists('badge_external', array('backpackid' => $obj->backpackid, 'collectionid' => $obj->collectionid))) { $DB->insert_record('badge_external', $obj); } } redirect(new moodle_url('/badges/mybadges.php')); } } } else { // If backpack is not connected, need to connect first. $form = new edit_backpack_form(); if ($form->is_cancelled()) { redirect(new moodle_url('/badges/mybadges.php')); } else { if ($data = $form->get_data()) { $bp = new OpenBadgesBackpackHandler($data); $obj = new stdClass(); $obj->userid = $data->userid; $obj->email = $data->email; $obj->backpackurl = $data->backpackurl; $obj->backpackuid = $bp->curl_request('user')->userId; $obj->autosync = 0; $obj->password = ''; $DB->insert_record('badge_backpack', $obj); redirect(new moodle_url('/badges/mybackpack.php')); } } } echo $OUTPUT->header(); $form->display(); echo $OUTPUT->footer();
/** * 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; }