function opigno_learning_path_views_query_alter in Opigno Learning path 8
Same name and namespace in other branches
- 3.x opigno_learning_path.module \opigno_learning_path_views_query_alter()
Implements hook_views_query_alter().
File
- ./
opigno_learning_path.module, line 2355 - Contains opigno_learning_path.module.
Code
function opigno_learning_path_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
// Hide learning paths from catalog
// for anonymous depending on the field value.
if ($view
->id() == 'opigno_training_catalog' && Drupal::currentUser()
->isAnonymous()) {
// Join the anonymous field table.
$definition = [
'table' => 'group__field_anonymous_visibility',
'field' => 'entity_id',
'left_table' => 'groups_field_data',
'left_field' => 'id',
];
$join = Drupal::service('plugin.manager.views.join')
->createInstance('standard', $definition);
// Add relation and where condition.
$query
->addRelationship('group__field_anonymous_visibility', $join, 'group__field_anonymous_visibility');
$query->where[] = [
'conditions' => [
[
'field' => 'group__field_anonymous_visibility.field_anonymous_visibility_value',
'value' => 1,
'operator' => '!=',
],
],
'type' => 'AND',
];
}
if ($view
->id() === 'opigno_group_members') {
$user = \Drupal::currentUser();
if (!$user
->hasPermission('manage group members in any group')) {
// If current user is not an admin and not a global user manager.
// Get trainings where the current user is a user manager.
/** @var \Drupal\group\GroupMembershipLoaderInterface $membership_service */
$membership_service = \Drupal::service('group.membership_loader');
$memberships = $membership_service
->loadByUser($user, [
'learning_path-user_manager',
]);
$groups_ids = array_map(function ($membership) {
/** @var \Drupal\group\GroupMembership $membership */
return $membership
->getGroup()
->id();
}, $memberships);
// Filter listed memberships by them.
if (!empty($groups_ids)) {
$query->where[] = [
'conditions' => [
[
'field' => 'groups_field_data_group_content_field_data.id',
'value' => $groups_ids,
'operator' => 'IN',
],
],
'type' => 'AND',
];
}
else {
$query->where[] = [
'conditions' => [
[
'field' => 'FALSE',
'value' => [],
'operator' => 'formula',
],
],
'type' => 'AND',
];
}
}
}
if ($view
->id() === 'opigno_group_members_table') {
// Add filter for only members of a training.
/** @var \Drupal\group\Entity\Group $group */
$group = \Drupal::routeMatch()
->getParameter('group');
if ($group) {
$members = $view->storage
->get('group_members');
$members = !empty($members) ? $members : [
0,
];
$query->where[] = [
'conditions' => [
[
'field' => 'group_content_field_data.entity_id',
'value' => $members,
'operator' => 'IN',
],
],
'type' => 'AND',
];
}
}
}