Skip to content

Commit f0e006e

Browse files
committed
[SD-1646] Applied Select2 widget to Site filters
Move Select2 styling for the Content and Moderated content admin views into tide_site so the widget is applied regardless of whether tide_site_restriction is enabled. tide_site_restriction now only injects the user's allowed sites as default exposed input and no longer toggles the filter to multi-value or re-applies Select2 for these views.
1 parent 467a9c0 commit f0e006e

3 files changed

Lines changed: 56 additions & 16 deletions

File tree

modules/tide_site/tide_site.install

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,3 +237,21 @@ function tide_site_update_10006() {
237237
$config->set($fields_path, $fields);
238238
$config->save(TRUE);
239239
}
240+
241+
/**
242+
* Change site option to multiple select for moderated content filters.
243+
*/
244+
function tide_site_update_10007() {
245+
$view_ids = [
246+
'views.view.tide_site_moderated_content_filters',
247+
'views.view.summary_contents_filters',
248+
];
249+
foreach ($view_ids as $view_id) {
250+
$config = \Drupal::configFactory()->getEditable($view_id);
251+
$key = 'display.default.display_options.filters.field_node_site_target_id.expose.multiple';
252+
if ($config->get($key) === FALSE) {
253+
$config->set($key, TRUE);
254+
$config->save(TRUE);
255+
}
256+
}
257+
}

modules/tide_site/tide_site.module

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,30 @@ function tide_site_tide_api_jsonapi_custom_query_parameters_alter(&$custom_param
749749
* Implements hook_form_FORM_ID_alter().
750750
*/
751751
function tide_site_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
752+
// Apply Select2 widget to Site exposed filters on the Content and
753+
// Moderated content admin views. Visual only — works for both single and
754+
// multi-value selects; whether it's multi is decided by the view config.
755+
// Lists both possible filter keys so it works in either deployment
756+
// (with or without tide_site_restriction, which swaps the filter name).
757+
$select2_form_filters = [
758+
'views-exposed-form-summary-contents-filters-page-1' => ['field_node_site_target_id', 'sub_sites_filter'],
759+
'views-exposed-form-tide-site-moderated-content-filters-moderated-content' => ['field_node_site_target_id'],
760+
];
761+
if (!empty($form['#id']) && isset($select2_form_filters[$form['#id']])) {
762+
foreach ($select2_form_filters[$form['#id']] as $filter) {
763+
if (!empty($form[$filter])) {
764+
$form[$filter]['#type'] = 'select2';
765+
$form[$filter]['#select2'] = [
766+
'allowClear' => TRUE,
767+
'dropdownAutoWidth' => FALSE,
768+
'width' => 'resolve',
769+
'closeOnSelect' => FALSE,
770+
'placeholder' => t('- Any -'),
771+
];
772+
}
773+
}
774+
}
775+
752776
$view = $form_state->get('view');
753777
if ($view && $view instanceof ViewExecutable) {
754778
if ($view->id() === 'summary_contents' && $view->current_display === 'page') {

modules/tide_site_restriction/tide_site_restriction.module

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,18 @@ function tide_site_restriction_views_pre_view(ViewExecutable $view, $display_id,
125125
$site_restriction_helper = \Drupal::service('tide_site_restriction.helper');
126126
$user_can_bypass_restriction = $site_restriction_helper->canBypassRestriction($account);
127127

128+
// Visual (multi-value + Select2) is handled by tide_site. Here we only
129+
// inject the user's allowed sites as the default exposed input so the
130+
// view is restricted on first load.
128131
$filters = $view->display_handler->getOption('filters');
129-
if (!empty($filters[$filter])) {
130-
$filters[$filter]['expose']['multiple'] = TRUE;
131-
$view->display_handler->setOption('filters', $filters);
132-
133-
if (!$user_can_bypass_restriction) {
134-
/** @var \Drupal\user\Entity\User $user */
135-
$user = User::load($account->id());
136-
$user_sites = $site_restriction_helper->getUserSites($user);
137-
$exposed_input = $view->getExposedInput();
138-
if (!empty($user_sites) && empty($exposed_input)) {
139-
$exposed_input[$filter] = $user_sites;
140-
$view->setExposedInput($exposed_input);
141-
}
132+
if (!empty($filters[$filter]) && !$user_can_bypass_restriction) {
133+
/** @var \Drupal\user\Entity\User $user */
134+
$user = User::load($account->id());
135+
$user_sites = $site_restriction_helper->getUserSites($user);
136+
$exposed_input = $view->getExposedInput();
137+
if (!empty($user_sites) && empty($exposed_input)) {
138+
$exposed_input[$filter] = $user_sites;
139+
$view->setExposedInput($exposed_input);
142140
}
143141
}
144142
}
@@ -229,12 +227,12 @@ function tide_site_restriction_views_pre_view(ViewExecutable $view, $display_id,
229227
* Implements hook_form_FORM_ID_alter().
230228
*/
231229
function tide_site_restriction_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
232-
// Enable Select2 to Site filter of Content Admin view.
230+
// Enable Select2 on Site filters for the views this module owns.
231+
// summary_contents_filters and tide_site_moderated_content_filters are
232+
// styled by tide_site instead, so they're intentionally omitted here.
233233
$form_ids = [
234234
'views-exposed-form-media-media-page-list' => 'field_media_site_target_id',
235-
'views-exposed-form-summary-contents-filters-page-1' => 'sub_sites_filter',
236235
'views-exposed-form-user-admin-people-page-1' => 'field_user_site_target_id_1',
237-
'views-exposed-form-tide-site-moderated-content-filters-moderated-content' => 'field_node_site_target_id',
238236
];
239237
foreach ($form_ids as $form_id => $filter) {
240238
if (!empty($form['#id']) && $form['#id'] == $form_id) {

0 commit comments

Comments
 (0)