[FEATURE] Integration campaign support

Resolves: #3
This commit is contained in:
Markus Klein 2020-10-08 16:47:44 +02:00
parent 4d401081e8
commit ca56b9224c
4 changed files with 29 additions and 12 deletions

View file

@ -9,8 +9,9 @@ require '../Includes/ExampleSettings.php';
use SkillDisplay\PHPToolKit\Verification\Issuer; use SkillDisplay\PHPToolKit\Verification\Issuer;
// Automatically grant a Business-Verification (e.g.: after completing an exam) if the SkillDisplay username is known // Automatically grant a Business-Verification (e.g.: after completing an exam) if the SkillDisplay username is known.
// The number 567 is the optional campaignId the verification is attributed to.
// In order to grant an Educational Verification you just need to exchange the constant to VERIFICATION_EDUCATIONAL // In order to grant an Educational Verification you just need to exchange the constant to VERIFICATION_EDUCATIONAL
// (your Verifier Account needs the according permissions) // (your Verifier Account needs the according permissions)
$myVerificationTool = new Issuer($mySettings); $myVerificationTool = new Issuer($mySettings);
$myVerificationTool->outputResponse($myVerificationTool->issueVerification(193, '--skilldisplay-user-email--', VERIFICATION_BUSINESS)); $myVerificationTool->outputResponse($myVerificationTool->issueVerification(193, '--skilldisplay-user-email--', VERIFICATION_BUSINESS, 567));

View file

@ -25,13 +25,16 @@ class Issuer
* @param string $useremail E-Mail of the User who should receive the verification * @param string $useremail E-Mail of the User who should receive the verification
* @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION * @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION
* @param bool $isSkillSet * @param bool $isSkillSet
* @param int $campaignId
*
* @return array * @return array
*/ */
private function generateSignedRequestData( private function generateSignedRequestData(
int $ID, int $ID,
string $useremail, string $useremail,
string $vtype, string $vtype,
bool $isSkillSet = false bool $isSkillSet = false,
int $campaignId = 0
): array { ): array {
if ($isSkillSet) { if ($isSkillSet) {
$requestData['SkillSetId'] = $ID; $requestData['SkillSetId'] = $ID;
@ -43,6 +46,9 @@ class Issuer
$requestData['VerifierId'] = $this->settings->getVerifierID(); $requestData['VerifierId'] = $this->settings->getVerifierID();
$requestData['Username'] = $useremail; $requestData['Username'] = $useremail;
$requestData['AutoConfirm'] = true; $requestData['AutoConfirm'] = true;
if ($campaignId) {
$requestData['CampaignId'] = $campaignId;
}
$requestData['Signature'] = ''; $requestData['Signature'] = '';
$json = json_encode($requestData); $json = json_encode($requestData);
@ -72,15 +78,17 @@ class Issuer
* @param string $useremail E-Mail of the SkillDisplay user for whom you want to verify the skill * @param string $useremail E-Mail of the SkillDisplay user for whom you want to verify the skill
* @param string $vtype Verification type, one of the constants in /src/Constants/VerificationTypes.php * @param string $vtype Verification type, one of the constants in /src/Constants/VerificationTypes.php
* @param bool $isSkillSet is the passed ID that of a SkillSet (else it is a single skill, also default) * @param bool $isSkillSet is the passed ID that of a SkillSet (else it is a single skill, also default)
* @param int $campaignId An optional campaign ID the verification is attributed to
* @return ResponseInterface * @return ResponseInterface
*/ */
public function issueVerification( public function issueVerification(
int $skillID, int $skillID,
string $useremail, string $useremail,
string $vtype, string $vtype,
bool $isSkillSet = false bool $isSkillSet = false,
int $campaignId = 0
): ResponseInterface { ): ResponseInterface {
$requestData = $this->generateSignedRequestData($skillID, $useremail, $vtype, $isSkillSet); $requestData = $this->generateSignedRequestData($skillID, $useremail, $vtype, $isSkillSet, $campaignId);
$client = new \GuzzleHttp\Client(); $client = new \GuzzleHttp\Client();
$request = new Request( $request = new Request(

View file

@ -81,9 +81,13 @@ class Link
/** /**
* @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION * @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION
* @param int|null $id The ID of the skill or skillset
* @param string $type one of SKILL or SKILL_SET
* @param int $campaignId An optional campaign ID the verification is attributed to
* @return string URL to a Verification that a user can click, he/she will see the Verification interface and can choose a verifier * @return string URL to a Verification that a user can click, he/she will see the Verification interface and can choose a verifier
* @throws \Exception
*/ */
public function getVerificationLink(string $vtype, ?int $id = null, string $type = self::SKILL): string public function getVerificationLink(string $vtype, ?int $id = null, string $type = self::SKILL, int $campaignId = 0): string
{ {
if ($type !== static::SKILL && $type !== static::SKILL_SET) { if ($type !== static::SKILL && $type !== static::SKILL_SET) {
throw new \Exception('$type has to be "' . static::SKILL . '" or "' . static::SKILL_SET . '" but "' . $type . '" given.', 1600774955); throw new \Exception('$type has to be "' . static::SKILL . '" or "' . static::SKILL_SET . '" but "' . $type . '" given.', 1600774955);
@ -95,7 +99,7 @@ class Link
throw new \InvalidArgumentException('No ID provided.', 1599723825); throw new \InvalidArgumentException('No ID provided.', 1599723825);
} }
$link = $this->settings->getMySkillDisplayUrl() . '/skillup/' . $type . '/' . $id . '/0/'; $link = $this->settings->getMySkillDisplayUrl() . '/skillup/' . $type . '/' . $id . '/0/' . ($campaignId ?: '');
switch ($vtype) { switch ($vtype) {
case VERIFICATION_EDUCATIONAL: case VERIFICATION_EDUCATIONAL:
$link .= '2'; $link .= '2';
@ -116,9 +120,13 @@ class Link
/** /**
* @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION * @param string $vtype one of VERIFICATION_SELF, VERIFICATION_EDUCATIONAL, VERIFICATION_BUSINESS, VERIFICATION_CERTIFICATION
* @param int|null $id The ID of the skill or skillset
* @param string $type one of SKILL or SKILL_SET
* @param int $campaignId An optional campaign ID the verification is attributed to
* @return string SVG Button to a Verification that a user can click, he/she will see the Verification interface and can choose a verifier * @return string SVG Button to a Verification that a user can click, he/she will see the Verification interface and can choose a verifier
* @throws \Exception
*/ */
public function getVerificationButton(string $vtype, ?int $id = null, string $type = self::SKILL): string public function getVerificationButton(string $vtype, ?int $id = null, string $type = self::SKILL, int $campaignId = 0): string
{ {
switch ($vtype) { switch ($vtype) {
case VERIFICATION_EDUCATIONAL: case VERIFICATION_EDUCATIONAL:
@ -135,7 +143,7 @@ class Link
break; break;
} }
return <<<BUTTON return <<<BUTTON
<a href="{$this->getVerificationLink($vtype, $id, $type)}" target="_blank">{$buttonsvg}</a> <a href="{$this->getVerificationLink($vtype, $id, $type, $campaignId)}" target="_blank">{$buttonsvg}</a>
BUTTON; BUTTON;
} }
} }

View file

@ -42,7 +42,7 @@ class LinkTest extends TestCase
/** /**
* @test * @test
*/ */
public function canReturnSkillVerificationLinkForEducational() public function canReturnSkillVerificationLinkForEducationalWithCampaign()
{ {
$settings = $this->prophesize(Settings::class); $settings = $this->prophesize(Settings::class);
$settings->getMySkillDisplayUrl()->willReturn('https://my.example.com/verify'); $settings->getMySkillDisplayUrl()->willReturn('https://my.example.com/verify');
@ -50,8 +50,8 @@ class LinkTest extends TestCase
$subject = new Link($settings->reveal(), 10); $subject = new Link($settings->reveal(), 10);
static::assertSame( static::assertSame(
'https://my.example.com/verify/skillup/skill/10/0/2', 'https://my.example.com/verify/skillup/skill/10/0/2/678',
$subject->getVerificationLink('education') $subject->getVerificationLink('education', null, Link::SKILL, 678)
); );
} }