badgr_badge-8.x-1.x-dev/src/Controller/AddToBackpack.php
src/Controller/AddToBackpack.php
<?php namespace Drupal\badgr_badge\Controller; use Drupal\Core\Controller\ControllerBase; use Drupal\node\NodeInterface; use Drupal\badgr_badge\BadgrServiceInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\badgr_badge\BadgrHelpers; use Drupal\Component\Serialization\Json; use GuzzleHttp\Exception\RequestException; use Symfony\Component\HttpFoundation\Request; use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\ReplaceCommand; use Drupal\Core\Session\AccountInterface; /** * Controller for badgr backpack. */ class AddToBackpack extends ControllerBase { /** * The current user service. * * @var use Drupal\Core\Session\AccountInterface; */ protected $currentUser; /** * Drupal\badgr_badge\BadgrServiceInterface definition. * * @var \Drupal\badgr_badge\BadgrServiceInterface */ protected $badgrService; /** * Constructs a \Drupal\badgr_badge\Form object. * * @param \Drupal\badgr_badge\BadgrServiceInterface $badgrService * The entity type manager. * @param \Drupal\Core\Session\AccountInterface $current_user * The current user. */ public function __construct(BadgrServiceInterface $badgrService, AccountInterface $current_user) { $this->badgrService = $badgrService; $this->currentUser = $current_user; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('badgr_badge.service'), $container->get('current_user') ); } /** * Callback to backpack. * * @param Object $badge * Object of content type Badgr Badges * @param string $acheived_date * timestamp when credential Registration status is Achieved * * @return string */ public function addtobackpack(NodeInterface $badge, string $acheived_date, $nojs, Request $request) { if (is_object($badge)) { $badge_entity_id = NULL; $badgr_account = NULL; $output = NULL; $user = $this->currentUser; if (!$badge->get('field_badge_entity_id')->isEmpty()) { $badge_entity = $badge->get('field_badge_entity_id')->getValue()[0]['value']; } if (!$badge->get('field_badge_image')->isEmpty()) { $badge_image = file_create_url($badge->field_badge_image->entity->getFileUri()); } if (!$badge->get('field_badge_account')->isEmpty()) { $badgr_account = $badge->get('field_badge_account')->first()->get('entity')->getTarget()->getValue(); if (is_object($badgr_account)) { if (!$badgr_account->get('field_badgr_access_token')->isEmpty()) { $access_token = $badgr_account->get('field_badgr_access_token')->getValue()[0]['value']; $award_data = $this->badgrService->badgr_get_award_badges($access_token, $badgr_account->id(), $badge_entity, $user->getEmail()); try { if($award_data['status']['success']) { if(empty($award_data['result'])) { $_post_details = Json::encode(BadgrHelpers::_get_badgr_badges_assertions_data($acheived_date, $user)); $output = $this->badgrService->badgr_award_badges($access_token, $_post_details, $badge_entity, $badgr_account->id()); if(!empty($output['result'])) { $status_message = 'Congratulations! Your ' . $badge->label() . ' Badge is added to your Badgr backpack.'; $this->messenger()->addMessage($this->t($status_message), 'status'); } } else { $status_message = 'Your ' . $badge->label() . ' Badge is already added to your Badgr backpack.'; $this->messenger()->addMessage($this->t($status_message), 'status'); } } } catch (RequestException $e) { //An error happened. if ($e->hasResponse()) { watchdog_exception('badgr_badge', $e->getMessage()); $status_message = $e->getMessage(); } } } } } } $response = new AjaxResponse(); $response->addCommand(new ReplaceCommand("#backpack{$badge->id()}", $status_message)); return $response; } }