class MeetingController in Opigno Moxtra 8
Same name and namespace in other branches
- 3.x src/Controller/MeetingController.php \Drupal\opigno_moxtra\Controller\MeetingController
Class MeetingController.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\opigno_moxtra\Controller\MeetingController
Expanded class hierarchy of MeetingController
1 string reference to 'MeetingController'
1 service uses MeetingController
File
- src/
Controller/ MeetingController.php, line 18
Namespace
Drupal\opigno_moxtra\ControllerView source
class MeetingController extends ControllerBase {
/**
* Opigno service.
*
* @var \Drupal\opigno_moxtra\MoxtraConnector
*/
protected $moxtraConnector;
/**
* Moxtra service.
*
* @var \Drupal\opigno_moxtra\MoxtraServiceInterface
*/
protected $moxtraService;
/**
* Creates new MeetingController instance.
*
* @param \Drupal\opigno_moxtra\MoxtraConnector $opigno_service
* Opigno API service.
* @param \Drupal\opigno_moxtra\MoxtraServiceInterface $moxtra_service
* Moxtra API service.
*/
public function __construct(MoxtraConnector $moxtra_connector, MoxtraServiceInterface $moxtra_service) {
$this->moxtraConnector = $moxtra_connector;
$this->moxtraService = $moxtra_service;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('opigno_moxtra.connector'), $container
->get('opigno_moxtra.moxtra_api'));
}
/**
* Returns render array for the navigation.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* Moxtra meeting.
*
* @return array
* Render array.
*/
protected function buildNavigation(MeetingInterface $opigno_moxtra_meeting) {
$gid = $opigno_moxtra_meeting
->getTrainingId();
if (empty($gid)) {
return [];
}
$actions = [];
$actions['form-actions'] = [
'#type' => 'container',
'#attributes' => [
'class' => [
'form-actions',
],
'id' => 'edit-actions',
],
'#title' => 'test',
];
$title = $this
->t('Back to training homepage');
$route = 'entity.group.canonical';
$route_params = [
'group' => $gid,
];
$options = [
'attributes' => [
'class' => [
'btn',
'btn-success',
],
'id' => 'edit-submit',
],
];
$actions['form-actions'][] = Link::createFromRoute($title, $route, $route_params, $options)
->toRenderable();
return $actions;
}
/**
* Returns render array for the scheduled live meeting.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* The Live Meeting.
*
* @return array
* Render array.
*/
protected function buildMeetingScheduled(MeetingInterface $opigno_moxtra_meeting) {
$training_id = $opigno_moxtra_meeting
->getTrainingId();
$user = $this
->currentUser();
if (!$user
->hasPermission('start meeting')) {
return [
'#type' => 'container',
'message' => [
'#markup' => $this
->t('This live meeting has not started yet<br />Come back later...'),
],
'navigation' => $this
->buildNavigation($opigno_moxtra_meeting),
];
}
$config = $this
->config('opigno_moxtra.settings');
$client_id = $config
->get('client_id');
$org_id = $config
->get('org_id');
$access_token = $this->moxtraConnector
->getToken();
$binder_id = $opigno_moxtra_meeting
->getBinderId();
$session_key = $opigno_moxtra_meeting
->getSessionKey();
$topic = $opigno_moxtra_meeting
->getTitle();
$invitees = [];
$members = $opigno_moxtra_meeting
->getMembers();
foreach ($members as $member) {
$prefix = $this->moxtraConnector
->prefix($member);
$invitees[] = [
'unique_id' => $prefix . $member
->id(),
];
}
$url = $this->moxtraConnector
->getUrl();
return [
'#type' => 'container',
'meeting_container' => [
'#type' => 'container',
'#attributes' => [
'id' => 'live-meeting-container',
],
],
'start_btn' => [
'#markup' => '<div class="start-meeting"><a href="#" id="start-meeting">' . $this
->t('Start the live meeting') . '<i class="icon-play-circle"></i></div></a>',
],
'navigation' => $this
->buildNavigation($opigno_moxtra_meeting),
'#attached' => [
'library' => [
'opigno_moxtra/moxtra.js',
'opigno_moxtra/meeting_scheduled',
],
'drupalSettings' => [
'opignoMoxtra' => [
'mode' => 'production',
'clientId' => $client_id,
'orgId' => $org_id,
'accessToken' => $access_token,
'binderId' => $binder_id,
'sessionKey' => $session_key,
'topic' => $topic,
'baseDomain' => $url,
'invitees' => $invitees,
],
],
],
];
}
/**
* Returns render array for the started live meeting.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* The Live Meeting.
*
* @return array
* Render array.
*/
protected function buildMeetingStarted(MeetingInterface $opigno_moxtra_meeting) {
$config = $this
->config('opigno_moxtra.settings');
$client_id = $config
->get('client_id');
$org_id = $config
->get('org_id');
$access_token = $this->moxtraConnector
->getToken();
$binder_id = $opigno_moxtra_meeting
->getBinderId();
$topic = $opigno_moxtra_meeting
->getTitle();
$invitees = [];
$members = $opigno_moxtra_meeting
->getMembers();
foreach ($members as $member) {
$prefix = $this->moxtraConnector
->prefix($member);
$invitees[] = [
'unique_id' => $prefix . $member
->id(),
];
}
$url = $this->moxtraConnector
->getUrl();
$session_key = $opigno_moxtra_meeting
->getSessionKey();
return [
'#type' => 'container',
'meeting_container' => [
'#type' => 'container',
'#attributes' => [
'id' => 'live-meeting-container',
],
],
'max_reached' => [
'#type' => 'html_tag',
'#tag' => 'span',
'#attributes' => [
'id' => 'max_reached',
'style' => 'display: none;',
],
'#value' => $this
->t('The maximum number of users for this meeting is reached.'),
],
'navigation' => $this
->buildNavigation($opigno_moxtra_meeting),
'#attached' => [
'library' => [
'opigno_moxtra/moxtra.js',
'opigno_moxtra/meeting_started',
],
'drupalSettings' => [
'opignoMoxtra' => [
'mode' => 'production',
'clientId' => $client_id,
'orgId' => $org_id,
'accessToken' => $access_token,
'binderId' => $binder_id,
'sessionKey' => $session_key,
'topic' => $topic,
'baseDomain' => $url,
'invitees' => $invitees,
],
],
],
];
}
/**
* Returns render array for the ended live meeting.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* The Live Meeting.
*
* @return array
* Render array.
*/
protected function buildMeetingEnded(MeetingInterface $opigno_moxtra_meeting) {
return [
'#type' => 'container',
'message' => [
'#markup' => '<div class="meeting-ended">' . $this
->t('This live meeting has ended.') . '<i class="icon-checked-circle"></i></div>',
],
'navigation' => $this
->buildNavigation($opigno_moxtra_meeting),
];
}
/**
* Returns index page for the live meeting.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* The Live Meeting.
*
* @return array
* Render array.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function index(MeetingInterface $opigno_moxtra_meeting) {
$owner_id = $opigno_moxtra_meeting
->getOwnerId();
$session_key = $opigno_moxtra_meeting
->getSessionKey();
$info = $this->moxtraService
->getMeetingInfo($owner_id, $session_key);
$content = [];
$status = !empty($info['data']) ? $info['data']['status'] : FALSE;
switch ($status) {
case 'SESSION_SCHEDULED':
$content[] = $this
->buildMeetingScheduled($opigno_moxtra_meeting);
break;
case 'SESSION_STARTED':
$content[] = $this
->buildMeetingStarted($opigno_moxtra_meeting);
break;
case 'SESSION_ENDED':
$uid = $this
->currentUser()
->id();
$gid = $opigno_moxtra_meeting
->getTrainingId();
if (isset($gid) && $opigno_moxtra_meeting
->isMember($uid)) {
// Update user achievements.
$step = opigno_learning_path_get_meeting_step($gid, $uid, $opigno_moxtra_meeting);
opigno_learning_path_save_step_achievements($gid, $uid, $step, 0);
opigno_learning_path_save_achievements($gid, $uid);
}
$content[] = $this
->buildMeetingEnded($opigno_moxtra_meeting);
break;
}
return $content;
}
/**
* Returns title for the live meeting.
*
* @param \Drupal\opigno_moxtra\MeetingInterface $opigno_moxtra_meeting
* The Live Meeting.
*
* @return string
* Meeting title.
*/
public function title(MeetingInterface $opigno_moxtra_meeting) {
return $opigno_moxtra_meeting
->getTitle();
}
/**
* Returns response for the autocompletion.
*
* @param \Drupal\group\Entity\Group $group
* Group.
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
* A JSON response containing the autocomplete suggestions.
*/
public function membersAutocomplete(Group $group) {
$matches = [];
$search = \Drupal::request()->query
->get('q');
if (!isset($search)) {
$search = '';
}
if ($group !== NULL) {
$training_members = $group
->getMembers();
$training_users = array_map(function ($member) {
/** @var \Drupal\group\GroupMembership $member */
return $member
->getUser();
}, $training_members);
foreach ($training_users as $user) {
$id = $user
->id();
$name = $user
->getDisplayName();
$label = $this
->t("@name (User #@id)", [
'@name' => $name,
'@id' => $id,
]);
$matches[] = [
'value' => $label,
'label' => $label,
'type' => 'user',
'id' => 'user_' . $id,
'name' => $name,
];
}
/** @var \Drupal\group\Entity\Group[] $classes */
$classes = $group
->getContentEntities('subgroup:opigno_class');
foreach ($classes as $class) {
$id = $class
->id();
$name = $class
->label();
$label = $this
->t("@name (Group #@id)", [
'@name' => $name,
'@id' => $id,
]);
$matches[] = [
'value' => $label,
'label' => $label,
'type' => 'group',
'id' => 'class_' . $id,
'name' => $name,
];
}
$search = strtoupper($search);
$matches = array_filter($matches, function ($match) use ($search) {
$name = strtoupper($match['name']);
return strpos($name, $search) !== FALSE;
});
usort($matches, function ($match1, $match2) {
return strcasecmp($match1['name'], $match2['name']);
});
}
return new JsonResponse($matches);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The module handler. | 2 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MeetingController:: |
protected | property | Opigno service. | |
MeetingController:: |
protected | property | Moxtra service. | |
MeetingController:: |
protected | function | Returns render array for the ended live meeting. | |
MeetingController:: |
protected | function | Returns render array for the scheduled live meeting. | |
MeetingController:: |
protected | function | Returns render array for the started live meeting. | |
MeetingController:: |
protected | function | Returns render array for the navigation. | |
MeetingController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
MeetingController:: |
public | function | Returns index page for the live meeting. | |
MeetingController:: |
public | function | Returns response for the autocompletion. | |
MeetingController:: |
public | function | Returns title for the live meeting. | |
MeetingController:: |
public | function | Creates new MeetingController instance. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |