You are here

public function MeetingController::membersAutocomplete in Opigno Moxtra 8

Same name and namespace in other branches
  1. 3.x src/Controller/MeetingController.php \Drupal\opigno_moxtra\Controller\MeetingController::membersAutocomplete()

Returns response for the autocompletion.

Parameters

\Drupal\group\Entity\Group $group: Group.

Return value

\Symfony\Component\HttpFoundation\JsonResponse A JSON response containing the autocomplete suggestions.

1 string reference to 'MeetingController::membersAutocomplete'
opigno_moxtra.routing.yml in ./opigno_moxtra.routing.yml
opigno_moxtra.routing.yml

File

src/Controller/MeetingController.php, line 345

Class

MeetingController
Class MeetingController.

Namespace

Drupal\opigno_moxtra\Controller

Code

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);
}