Example #1
0
 /**
  * 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;
 }
Example #2
0
        $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;
Example #3
0
                $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();
Example #4
0
/**
 * 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;
}
Example #5
0
/**
 * 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;
}