Commit cf2877d9 authored by Andreas De Rijcke's avatar Andreas De Rijcke
Browse files

Issue #3284884 Added Views filter for User by Mail Group memberships.

parent c6ccb0b0
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -143,6 +143,12 @@ function mailgroup_views_data_alter(array &$data) {
      'title' => new TranslatableMarkup('Mail Group Memberships'),
      'help' => new TranslatableMarkup("The User's Mail Group Memberships."),
    ],
    'filter' => [
      'id' => 'mailgroup_memberships',
      'real field' => 'uid',
      'title' => new TranslatableMarkup('Mail Group Memberships'),
      'help' => new TranslatableMarkup("The User's Mail Group Memberships."),
    ],
  ];
}

+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ use Drupal\views\Plugin\views\field\PrerenderList;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Provides the Mail Group Memberships of the User.
 * Provides the Mail Group Memberships of User.
 *
 * @ingroup views_field_handlers
 *
+49 −0
Original line number Diff line number Diff line
<?php

namespace Drupal\mailgroup\Plugin\views\filter;

use Drupal\Core\Database\Database;
use Drupal\mailgroup\Entity\MailGroup;
use Drupal\views\Plugin\views\filter\InOperator;

/**
 * Mail Group Memberships filter by Mail Group for User.
 *
 * @ingroup views_filter_handlers
 *
 * @ViewsFilter("mailgroup_memberships")
 */
class MailGroupMemberships extends InOperator {

  /**
   * {@inheritdoc}
   */
  public function getValueOptions() {

    $mailgroups = MailGroup::loadMultiple();
    foreach ($mailgroups as $id => $mailgroup) {
      $this->valueOptions[$id] = $mailgroup->label();
    }

    return $this->valueOptions;
  }

  /**
   * {@inheritdoc}
   */
  protected function opSimple() {
    if (empty($this->value)) {
      return;
    }
    $this->ensureMyTable();

    // Using a sub query avoids having to work with table joins or views
    // relationship definitions.
    $subselect = Database::getConnection()->select('mailgroup_membership', 'mm');
    $subselect->addField('mm', 'uid');
    $subselect->condition('mm.gid', $this->value, 'IN');

    $this->query->addWhere($this->options['group'], "$this->tableAlias.$this->realField", $subselect, $this->operator);
  }

}