View source
<?php
namespace Drupal\opigno_ilt\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\group\Entity\Group;
use Symfony\Component\HttpFoundation\JsonResponse;
class ILTController extends ControllerBase {
public function membersAutocompleteSelect(Group $group) {
$matches = [];
$search = \Drupal::request()->query
->get('q');
if (!isset($search)) {
$search = '';
}
if (isset($group)) {
$training_members = $group
->getMembers();
$training_users = array_map(function ($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['user_' . $id] = [
'value' => $label,
'label' => $label,
'type' => 'user',
'id' => 'user_' . $id,
'name' => $name,
];
}
$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['class_' . $id] = [
'value' => $label,
'label' => $label,
'type' => 'group',
'id' => 'class_' . $id,
'name' => $name,
];
}
$search = strtoupper($search);
if ($search) {
$matches = array_filter($matches, function ($match) use ($search) {
$name = strtoupper($match['name']);
return strpos($name, $search) !== FALSE;
});
}
}
return [
$matches,
NULL,
];
}
public function membersAutocomplete(Group $group) {
[
$matches,
$default,
] = $this
->membersAutocompleteSelect($group);
return new JsonResponse($matches);
}
public function trainerAutocomplete(Group $group) {
$matches = [];
$search = \Drupal::request()->query
->get('q');
if (!isset($search)) {
$search = '';
}
if (isset($group)) {
$training_members = $group
->getMembers();
$training_users = array_map(function ($member) {
return $member
->getUser();
}, $training_members);
foreach ($training_users as $user) {
$id = $user
->id();
$name = $user
->getDisplayName();
$label = $this
->t("@name", [
'@name' => $name,
'@id' => $id,
]);
$matches[] = [
'value' => $label,
'label' => $label,
'type' => 'user',
'id' => 'user_' . $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);
}
}