Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions modules/tide_site/tide_site.install
Original file line number Diff line number Diff line change
Expand Up @@ -237,3 +237,21 @@ function tide_site_update_10006() {
$config->set($fields_path, $fields);
$config->save(TRUE);
}

/**
* Change site option to multiple select for moderated content filters.
*/
function tide_site_update_10007() {
$view_ids = [
'views.view.tide_site_moderated_content_filters',
'views.view.summary_contents_filters',
];
foreach ($view_ids as $view_id) {
$config = \Drupal::configFactory()->getEditable($view_id);
$key = 'display.default.display_options.filters.field_node_site_target_id.expose.multiple';
if ($config->get($key) === FALSE) {
$config->set($key, TRUE);
$config->save(TRUE);
}
}
}
24 changes: 24 additions & 0 deletions modules/tide_site/tide_site.module
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,30 @@ function tide_site_tide_api_jsonapi_custom_query_parameters_alter(&$custom_param
* Implements hook_form_FORM_ID_alter().
*/
function tide_site_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Apply Select2 widget to Site exposed filters on the Content and
// Moderated content admin views. Visual only — works for both single and
// multi-value selects; whether it's multi is decided by the view config.
// Lists both possible filter keys so it works in either deployment
// (with or without tide_site_restriction, which swaps the filter name).
$select2_form_filters = [
'views-exposed-form-summary-contents-filters-page-1' => ['field_node_site_target_id', 'sub_sites_filter'],
'views-exposed-form-tide-site-moderated-content-filters-moderated-content' => ['field_node_site_target_id'],
];
if (!empty($form['#id']) && isset($select2_form_filters[$form['#id']])) {
foreach ($select2_form_filters[$form['#id']] as $filter) {
if (!empty($form[$filter])) {
$form[$filter]['#type'] = 'select2';
$form[$filter]['#select2'] = [
'allowClear' => TRUE,
'dropdownAutoWidth' => FALSE,
'width' => 'resolve',
'closeOnSelect' => FALSE,
'placeholder' => t('- Any -'),
];
}
}
}

$view = $form_state->get('view');
if ($view && $view instanceof ViewExecutable) {
if ($view->id() === 'summary_contents' && $view->current_display === 'page') {
Expand Down
30 changes: 14 additions & 16 deletions modules/tide_site_restriction/tide_site_restriction.module
Original file line number Diff line number Diff line change
Expand Up @@ -125,20 +125,18 @@ function tide_site_restriction_views_pre_view(ViewExecutable $view, $display_id,
$site_restriction_helper = \Drupal::service('tide_site_restriction.helper');
$user_can_bypass_restriction = $site_restriction_helper->canBypassRestriction($account);

// Visual (multi-value + Select2) is handled by tide_site. Here we only
// inject the user's allowed sites as the default exposed input so the
// view is restricted on first load.
$filters = $view->display_handler->getOption('filters');
if (!empty($filters[$filter])) {
$filters[$filter]['expose']['multiple'] = TRUE;
$view->display_handler->setOption('filters', $filters);

if (!$user_can_bypass_restriction) {
/** @var \Drupal\user\Entity\User $user */
$user = User::load($account->id());
$user_sites = $site_restriction_helper->getUserSites($user);
$exposed_input = $view->getExposedInput();
if (!empty($user_sites) && empty($exposed_input)) {
$exposed_input[$filter] = $user_sites;
$view->setExposedInput($exposed_input);
}
if (!empty($filters[$filter]) && !$user_can_bypass_restriction) {
/** @var \Drupal\user\Entity\User $user */
$user = User::load($account->id());
$user_sites = $site_restriction_helper->getUserSites($user);
$exposed_input = $view->getExposedInput();
if (!empty($user_sites) && empty($exposed_input)) {
$exposed_input[$filter] = $user_sites;
$view->setExposedInput($exposed_input);
}
}
}
Expand Down Expand Up @@ -229,12 +227,12 @@ function tide_site_restriction_views_pre_view(ViewExecutable $view, $display_id,
* Implements hook_form_FORM_ID_alter().
*/
function tide_site_restriction_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Enable Select2 to Site filter of Content Admin view.
// Enable Select2 on Site filters for the views this module owns.
// summary_contents_filters and tide_site_moderated_content_filters are
// styled by tide_site instead, so they're intentionally omitted here.
$form_ids = [
'views-exposed-form-media-media-page-list' => 'field_media_site_target_id',
'views-exposed-form-summary-contents-filters-page-1' => 'sub_sites_filter',
'views-exposed-form-user-admin-people-page-1' => 'field_user_site_target_id_1',
'views-exposed-form-tide-site-moderated-content-filters-moderated-content' => 'field_node_site_target_id',
];
foreach ($form_ids as $form_id => $filter) {
if (!empty($form['#id']) && $form['#id'] == $form_id) {
Expand Down
Loading