You are here

public function SocialTaggingOverrides::loadOverrides in Open Social 10.3.x

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  2. 8 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  3. 8.2 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  4. 8.3 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  5. 8.4 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  6. 8.5 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  7. 8.6 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  8. 8.7 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  9. 8.8 modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  10. 10.0.x modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  11. 10.1.x modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()
  12. 10.2.x modules/social_features/social_tagging/src/SocialTaggingOverrides.php \Drupal\social_tagging\SocialTaggingOverrides::loadOverrides()

Returns config overrides.

Parameters

array $names: A list of configuration names that are being loaded.

Return value

array An array keyed by configuration name of override data. Override data contains a nested array structure of overrides.

Overrides ConfigFactoryOverrideInterface::loadOverrides

File

modules/social_features/social_tagging/src/SocialTaggingOverrides.php, line 60

Class

SocialTaggingOverrides
Configuration override.

Namespace

Drupal\social_tagging

Code

public function loadOverrides($names) {
  if (!$this
    ->shouldApplyOverrides($names)) {
    return [];
  }
  $overrides = [];

  /** @var \Drupal\social_tagging\SocialTaggingService $tag_service */
  $tag_service = \Drupal::service('social_tagging.tag_service');

  // Check if tagging is active.
  if (!($tag_service
    ->active() && $tag_service
    ->hasContent())) {
    return $overrides;
  }

  // Add tagging field to the search index.
  $config_search = [
    'search_api.index.social_content' => 'node',
  ];
  if ($tag_service
    ->groupActive()) {
    $config_search['search_api.index.social_groups'] = 'group';
  }
  if ($tag_service
    ->profileActive()) {
    $config_search['search_api.index.social_users'] = 'profile';
  }
  foreach ($config_search as $config_name => $type) {
    if (in_array($config_name, $names)) {
      $field_settings = \Drupal::configFactory()
        ->getEditable($config_name)
        ->get('field_settings');
      $field_settings['social_tagging'] = [
        'label' => 'Tags',
        'datasource_id' => 'entity:' . $type,
        'property_path' => 'social_tagging',
        'type' => 'integer',
      ];
      $overrides[$config_name]['field_settings'] = $field_settings;
    }
  }

  // Prepare fields.
  $fields['social_tagging'] = [
    'identifier' => 'tag',
    'label' => 'Tags',
  ];
  if ($tag_service
    ->allowSplit()) {
    $fields = [];
    foreach ($tag_service
      ->getCategories() as $tid => $value) {
      if (!empty($tag_service
        ->getChildren($tid))) {
        $fields['social_tagging_' . $tid] = [
          'identifier' => social_tagging_to_machine_name($value),
          'label' => $value,
        ];
      }
      elseif ($tag_service
        ->useCategoryParent()) {
        $fields['social_tagging_' . $tid] = [
          'identifier' => social_tagging_to_machine_name($value),
          'label' => $value,
        ];
      }
    }
  }

  // Add tagging fields to the views filters.
  $config_views = [
    'views.view.search_content' => 'search_api_index_social_content',
  ];
  if ($tag_service
    ->groupActive()) {
    $config_views['views.view.search_groups'] = 'search_api_index_social_groups';
  }
  if ($tag_service
    ->profileActive()) {
    $config_views['views.view.search_users'] = 'search_api_index_social_users';
  }
  foreach ($config_views as $config_name => $type) {
    if (in_array($config_name, $names)) {
      $overrides[$config_name]['dependencies']['config'][] = 'taxonomy.vocabulary.social_tagging';
      foreach ([
        'default',
        'page',
        'page_no_value',
      ] as $display) {
        $overrides[$config_name]['display'][$display]['cache_metadata']['contexts'][] = 'user';
      }
      $group = 1;
      if (count($fields) > 1) {
        $overrides[$config_name]['display']['default']['display_options']['filter_groups']['groups'][1] = 'AND';
        $overrides[$config_name]['display']['default']['display_options']['filter_groups']['groups'][2] = 'OR';
        $group++;
      }
      foreach ($fields as $field => $data) {
        $overrides[$config_name]['display']['default']['display_options']['filters'][$field] = [
          'id' => $field,
          'table' => $type,
          'field' => 'social_tagging',
          'relationship' => 'none',
          'group_type' => 'group',
          'admin_label' => '',
          'operator' => 'or',
          'value' => [],
          'group' => $group,
          'exposed' => TRUE,
          'expose' => [
            'operator_id' => $field . '_op',
            'label' => $data['label'],
            'description' => '',
            'use_operator' => FALSE,
            'operator' => $field . '_op',
            'identifier' => $data['identifier'],
            'required' => FALSE,
            'remember' => FALSE,
            'multiple' => TRUE,
            'remember_roles' => [
              'authenticated' => 'authenticated',
              'anonymous' => '0',
              'administrator' => '0',
              'contentmanager' => '0',
              'sitemanager' => '0',
            ],
            'reduce' => FALSE,
          ],
          'is_grouped' => FALSE,
          'group_info' => [
            'label' => '',
            'description' => '',
            'identifier' => '',
            'optional' => TRUE,
            'widget' => 'select',
            'multiple' => FALSE,
            'remember' => FALSE,
            'default_group' => 'All',
            'default_group_multiple' => [],
            'group_items' => [],
          ],
          'reduce_duplicates' => FALSE,
          'type' => 'select',
          'limit' => TRUE,
          'vid' => 'social_tagging',
          'hierarchy' => FALSE,
          'error_message' => TRUE,
          'plugin_id' => 'search_api_term',
        ];
      }
    }
  }

  // Prepare fields.
  $fields = [];
  $fields['social_tagging_target_id'] = [
    'identifier' => 'tag',
    'label' => 'Tags',
  ];
  if ($tag_service
    ->allowSplit()) {
    $fields = [];
    foreach ($tag_service
      ->getCategories() as $tid => $value) {
      if (!empty($tag_service
        ->getChildren($tid))) {
        $fields['social_tagging_target_id_' . $tid] = [
          'identifier' => social_tagging_to_machine_name($value),
          'label' => $value,
        ];
      }
    }
  }

  // Add tagging fields to the views filters.
  $config_overviews = [
    'views.view.latest_topics' => 'page_latest_topics',
    'views.view.upcoming_events' => 'page_community_events',
    'views.view.topics' => 'default',
    'views.view.events' => 'events_overview',
    'views.view.group_topics' => 'default',
    'views.view.group_events' => 'default',
    'views.view.newest_groups' => 'page_all_groups',
  ];
  if ($tag_service
    ->profileActive()) {
    $config_overviews['views.view.newest_users'] = 'default';
  }
  foreach ($config_overviews as $config_name => $display) {
    if (in_array($config_name, $names)) {
      $overrides[$config_name]['dependencies']['config'][] = 'taxonomy.vocabulary.social_tagging';
      $overrides[$config_name]['display'][$display]['cache_metadata']['contexts'][] = 'user';
      $group = 1;
      if (count($fields) > 1) {
        $overrides[$config_name]['display'][$display]['display_options']['filter_groups']['groups'][1] = 'AND';
        $overrides[$config_name]['display'][$display]['display_options']['filter_groups']['groups'][2] = 'OR';
        $group++;
      }
      $relationship = $config_name === 'views.view.group_topics' || $config_name === 'views.view.group_events' ? 'gc__node' : 'none';
      $table = $config_name === 'views.view.newest_groups' ? 'group__social_tagging' : 'node__social_tagging';
      if ($tag_service
        ->profileActive()) {
        $table = 'profile__social_tagging';
      }
      foreach ($fields as $field => $data) {
        $overrides[$config_name]['display'][$display]['display_options']['filters'][$field] = [
          'id' => $field,
          'table' => $table,
          'field' => 'social_tagging_target_id',
          'relationship' => $relationship,
          'group_type' => 'group',
          'admin_label' => '',
          'operator' => '=',
          'value' => [
            'min' => '',
            'max' => '',
            'value' => '',
          ],
          'group' => $group,
          'exposed' => TRUE,
          'expose' => [
            'operator_id' => $field . '_op',
            'label' => $data['label'],
            'description' => '',
            'use_operator' => FALSE,
            'operator' => $field . '_op',
            'identifier' => $data['identifier'],
            'required' => FALSE,
            'remember' => FALSE,
            'multiple' => FALSE,
            'remember_roles' => [
              'authenticated' => 'authenticated',
              'anonymous' => '0',
              'administrator' => '0',
              'contentmanager' => '0',
              'sitemanager' => '0',
            ],
            'placeholder' => '',
            'min_placeholder' => '',
            'max_placeholder' => '',
          ],
          'is_grouped' => FALSE,
          'group_info' => [
            'label' => '',
            'description' => '',
            'identifier' => '',
            'optional' => TRUE,
            'widget' => 'select',
            'multiple' => FALSE,
            'remember' => FALSE,
            'default_group' => 'All',
            'default_group_multiple' => [],
            'group_items' => [],
          ],
          'entity_type' => 'node',
          'entity_field' => 'social_tagging',
          'plugin_id' => 'numeric',
        ];
      }
    }
  }
  $config_name = 'core.entity_view_display.profile.profile.default';
  if (in_array($config_name, $names)) {
    $overrides[$config_name]['content']['social_tagging'] = [
      'weight' => 7,
      'label' => 'visually_hidden',
      'settings' => [
        'link' => 'true',
      ],
      'third_party_settings' => [],
      'type' => 'entity_reference_label',
      'region' => 'content',
    ];
  }
  return $overrides;
}