badgr_badge-8.x-1.x-dev/src/BadgrHelpers.php
src/BadgrHelpers.php
<?php namespace Drupal\badgr_badge; use Drupal\Core\Session\AccountInterface; use GuzzleHttp\Exception\RequestException; use Drupal\Component\Serialization\Json; use GuzzleHttp\ClientInterface; use Drupal\node\Entity\Node; use Drupal\file\Entity\File; use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; /** * Class BadgrHelpers. */ class BadgrHelpers { /** * The entity type manager. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ protected $entityTypeManager; /** * Constructs a BadgrHelpers object. * * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. */ public function __construct(EntityTypeManagerInterface $entity_type_manager) { $this->entityTypeManager = $entity_type_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity_type.manager') ); } /** * Badgr class details * * @param array $details * @return array $_post_details */ public static function _get_badgr_badges_classes_data(array $details) { $_post_details = []; if ($details) { $badge_image_uri = $details['badge_image']; $badge_image_url = file_get_contents(file_create_url($badge_image_uri)); $_post_details = [ 'name' => $details['badge_name'], 'image' => 'data:image/png;base64,' . base64_encode($badge_image_url), 'description' => $details['badge_description'], 'criteriaUrl' => $details['badge_earning_url'], 'criteriaNarrative' => $details['badge_earning_criteria'] ]; } return $_post_details; } /** * Badgr isssuer details * * @param array $details * @return array $_post_details */ public static function _get_badgr_issuer_classes_data(array $details) { $_post_details = []; if ($details) { $issuer_image_uri = $details['issuers_image']; $issuer_image_url = file_get_contents(file_create_url($issuer_image_uri)); $_post_details = [ 'name' => $details['issuers_name'], 'image' => 'data:image/png;base64,' . base64_encode($issuer_image_url), 'description' => $details['issuers_description'], 'email' => $details['badgr_account_email'], 'url' => $details['issuer_website_url'] ]; } return $_post_details; } /** * Badgr class details * * @param array $acheived_date * Credential Registration achivement date * @param Object $user * Current user object * @return array $_post_details */ public static function _get_badgr_badges_assertions_data($acheived_date, $user) { $_post_details = []; if ($acheived_date) { $_post_details = [ 'recipient' => [ 'identity' => $user->getEmail(), 'type' => 'email', 'hashed' => true, 'plaintextIdentity' => 'mybadge!' ] ]; } return $_post_details; } /** * Callback function to create issuers content * @param array $value_badges * @param int $badgerAccountID * * @return object $issuer_content */ public static function _udl_badgr_create_badges_content(array $value_badges, int $badgerAccountID) { $issuer_content = FALSE; if (isset($value_badges['issuer']) && !empty($value_badges['issuer'])) { $issuer = NULL; $issuer = $this->entityTypeManager->getStorage('node')->loadByProperties( [ 'type' =>'badgr_issuer', 'field_issuer_entity_id' => $value_badges['issuer'] ] ); $issuer = reset($issuer); if (is_object($issuer)) { if ($issuer->id()) { $issuer_content = $this->entityTypeManager->getStorage('node')->loadByProperties( [ 'type' =>'badgr_badges', 'field_badge_entity_id' => $value_badges['entityId'] ] ); $issuer_content = reset($issuer_content); if (is_object($issuer_content)) { $issuer_content->set('title', $value_badges['name']); $issuer_content->set('body', $value_badges['description']); $issuer_content->set('field_badge_earning_criteria', $value_badges['criteriaNarrative']); $issuer_content->set('field_badge_earning_url', $value_badges['criteriaUrl']); $issuer_content->set('field_badge_account', ['target_id' => $badgerAccountID]); if (!empty($value_badges['image'])) { $image_file_name = pathinfo($value_badges['image']); $image = file_get_contents($value_badges['image']); $file = file_save_data($image, 'public://' . $image_file_name['basename'], FileSystemInterface::EXISTS_RENAME); $file = file_copy($file, 'public://'); $issuer_content->set('field_badge_image',['target_id' => $file->id()]); } $issuer_content->save(); } else { $issuer_content = Node::create(['type' => 'badgr_badges']); $issuer_content->set('title', $value_badges['name']); $issuer_content->set('body', $value_badges['description']); $issuer_content->set('field_badge_earning_criteria', $value_badges['criteriaNarrative']); $issuer_content->set('field_badge_earning_url', $value_badges['criteriaUrl']); $issuer_content->set('field_badge_account', ['target_id' => $badgerAccountID]); $issuer_content->set('field_badge_entity_id', $value_badges['entityId']); // Image insertion if (!empty($value_badges['image'])) { $image_file_name = pathinfo($value_badges['image']); $image = file_get_contents($value_badges['image']); $file = file_save_data($image, 'public://' . $image_file_name['basename'], FileSystemInterface::EXISTS_RENAME); if (!empty($file) && !empty($file->id())) { $file->setPermanent(); $file->save(); if (is_object($file)) { $issuer_content->set('field_badge_image', [ 'target_id' => $file->id(), 'alt' => t('Badges logo'), 'uid' => 1, 'title' => $file->getFilename(), ] ); } } } $issuer_content->enforceIsNew(); $issuer_content->save(); } } $issuer->field_badges_reference[] = ['target_id' => $issuer_content->id()]; $issuer->save(); } } return $issuer_content; } /** * Callback function to create issuers content * * @param array $value_badges * @param int $badgerAccountID */ public static function _udl_badgr_create_issuers_content(array $value_issuer, int $badgerAccountID) { $issuer = FALSE; if ($value_issuer) { $issuer = $this->entityTypeManager->getStorage('node')->loadByProperties( [ 'type' =>'badgr_issuer', 'field_issuer_entity_id' => $value_issuer['entityId'] ] ); $issuer = reset($issuer); if (is_object($issuer)) { if ($issuer->id()) { $issuer->set('title', $value_issuer['name']); $issuer->set('body', $value_issuer['description']); $issuer->set('field_issuer_contact_email', $value_issuer['email']); $issuer->set('field_issuer_website_url', $value_issuer['url']); $issuer->set('field_badge_account', ['target_id' => $badgerAccountID]); // Image insertion if (!empty($value_issuer['image'])) { $image_file_name = pathinfo($value_issuer['image']); $image = file_get_contents($value_issuer['image']); $file = file_save_data($image, 'public://' . $image_file_name['basename']); if (!empty($file) && !empty($file->id())) { $file->setPermanent(); $file->save(); if (is_object($file)) { $issuer->set('field_issuer_image', [ 'target_id' => $file->id(), 'alt' => t('Issuer logo'), 'uid' => 1, 'title' => $file->getFilename(), ] ); } } } $issuer->save(); } } else { $issuer = Node::create(['type' => 'badgr_issuer']); $issuer->set('title', $value_issuer['name']); $issuer->set('body', $value_issuer['description']); $issuer->set('field_issuer_contact_email', $value_issuer['email']); $issuer->set('field_issuer_website_url', $value_issuer['url']); $issuer->set('field_badge_account', ['target_id' => $badgerAccountID]); $issuer->set('field_issuer_entity_id', $value_issuer['entityId']); // Image insertion if (!empty($value_issuer['image'])) { $image_file_name = pathinfo($value_issuer['image']); $image = file_get_contents($value_issuer['image']); $file = file_save_data($image, 'public://' . $image_file_name['basename'], FileSystemInterface::EXISTS_RENAME); if (!empty($file) && !empty($file->id())) { $file->setPermanent(); $file->save(); if (is_object($file)) { $issuer->set('field_issuer_image', [ 'target_id' => $file->id(), 'alt' => t('Issuer logo'), 'uid' => 1, 'title' => $file->getFilename(), ] ); } } } $issuer->enforceIsNew(); $issuer->save(); } } return $issuer; } }