class RestrictedNameProcessor in Open Social 8.7
Same name and namespace in other branches
- 8.9 modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- 8.8 modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- 10.3.x modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- 10.0.x modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- 10.1.x modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- 10.2.x modules/social_features/social_profile/modules/social_profile_privacy/src/Plugin/search_api/processor/RestrictedNameProcessor.php \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
The RestrictedNameProcessor adds the restricted name to search indexes.
The restricted name is a field that's based on the full name of a user or the nickname, if they have it filled in. This is added to the search index because it's not possibly to search on these fields on a row by row basis. If the `limit_search_and_mention` setting is TRUE then users should not be findable by their real name if they have a nickname filled and the user searching does not have the `social profile privacy always show full name` permission.
Ensures that when the setting is enabled to be strict with first/last name display and the current user does not have the permission to bypass this setting that the search queries are altered to ignore the first name/last name when the target user has filled in a nickname.
Users will not be able to find themselves by first/last name if they have filled in a nickname and do not have the correct permissions. This is intentional because it means that they can test how other users can find them.
This processor should run before other processors that affect indexed values such as the IgnoreCase or Tokenizer processor.
Plugin annotation
@SearchApiProcessor(
id = "social_profile_privacy_restricted_name",
label = @Translation("Restricted Name"),
description = @Translation("Adds the restricted name to the index according to the privacy rules."),
stages = {
"add_properties" = 0,
"pre_index_save" = -50,
"preprocess_query" = 0,
},
locked = true,
hidden = true,
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\search_api\Plugin\HideablePluginBase implements HideablePluginInterface
- class \Drupal\search_api\Plugin\ConfigurablePluginBase implements ConfigurablePluginInterface uses PluginDependencyTrait
- class \Drupal\search_api\Plugin\IndexPluginBase implements IndexPluginInterface
- class \Drupal\search_api\Processor\ProcessorPluginBase implements ProcessorInterface
- class \Drupal\social_profile_privacy\Plugin\search_api\processor\RestrictedNameProcessor
- class \Drupal\search_api\Processor\ProcessorPluginBase implements ProcessorInterface
- class \Drupal\search_api\Plugin\IndexPluginBase implements IndexPluginInterface
- class \Drupal\search_api\Plugin\ConfigurablePluginBase implements ConfigurablePluginInterface uses PluginDependencyTrait
- class \Drupal\search_api\Plugin\HideablePluginBase implements HideablePluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of RestrictedNameProcessor
File
- modules/
social_features/ social_profile/ modules/ social_profile_privacy/ src/ Plugin/ search_api/ processor/ RestrictedNameProcessor.php, line 48
Namespace
Drupal\social_profile_privacy\Plugin\search_api\processorView source
class RestrictedNameProcessor extends ProcessorPluginBase {
/**
* {@inheritdoc}
*/
public function getPropertyDefinitions(DatasourceInterface $datasource = NULL) {
$properties = parent::getPropertyDefinitions($datasource);
if ($datasource && $this
->supportsDataSource($datasource)) {
$definition = [
'label' => $this
->t('Restricted Name'),
'description' => $this
->t('The display name that is visible for unpriviliged users.'),
'type' => 'search_api_text',
'is_list' => FALSE,
'processor_id' => $this
->getPluginId(),
];
$properties['social_profile_privacy_restricted_name'] = new ProcessorProperty($definition);
}
return $properties;
}
/**
* {@inheritdoc}
*/
public function preIndexSave() {
$datasources = $this
->getIndex()
->getDatasources();
// Ensure that we have our "Restricted Name" field for all our supported
// datasources.
foreach ($datasources as $datasource_id => $datasource) {
if ($this
->supportsDataSource($datasource)) {
$this
->ensureField($datasource_id, 'social_profile_privacy_restricted_name');
}
}
}
/**
* {@inheritdoc}
*/
public function addFieldValues(ItemInterface $item) {
$restricted_name = NULL;
$nickname = $this
->getFirstItemField($item, 'field_profile_nick_name');
// If the user specified a nickname then we will default to using it as
// restricted name.
if ($nickname !== '') {
$restricted_name = $nickname;
}
else {
$first_name = $this
->getFirstItemField($item, 'field_profile_first_name');
$last_name = $this
->getFirstItemField($item, 'field_profile_last_name');
$full_name = trim($first_name . ' ' . $last_name);
if ($full_name !== '') {
$restricted_name = $full_name;
}
}
// If we have a restricted name we add it as a value for all of our
// restricted name fields.
if ($restricted_name) {
$fields = $this
->getFieldsHelper()
->filterForPropertyPath($item
->getFields(), $item
->getDatasourceId(), 'social_profile_privacy_restricted_name');
foreach ($fields as $field) {
$field
->addValue($restricted_name);
}
}
}
/**
* {@inheritdoc}
*/
public function preprocessSearchQuery(QueryInterface $query) {
$config = \Drupal::config('social_profile_privacy.settings');
$account = \Drupal::currentUser();
// If the use of real names is not limited or the user can bypass this
// restriction then we're done too.
if (!$config
->get('limit_search_and_mention') || $account
->hasPermission('social profile privacy always show full name')) {
return;
}
// Get all fields available to search in.
$all_fields = $query
->getFulltextFields() ?? $query
->getIndex()
->getFulltextFields();
// Remove the first name and last name from the search query, if a user has
// no nickname, this value will be searchable through
// social_profile_privacy_restricted_name. If a user has a nickname then the
// first and last name is not searchable.
$search_fields = array_diff($all_fields, [
'field_profile_first_name',
'field_profile_last_name',
]);
$query
->setFulltextFields($search_fields);
}
/**
* Check whether the datasource is supported by this processor.
*
* @param \Drupal\search_api\Datasource\DatasourceInterface $datasource
* The data source to verify.
*
* @return bool
* Whether this processor can use the datasource.
*/
protected function supportsDataSource(DatasourceInterface $datasource) : bool {
return $datasource
->getEntityTypeId() === 'profile';
}
/**
* Fetches the first value of a field for an item.
*
* @param \Drupal\search_api\Item\ItemInterface $item
* The item that the field belongs to.
* @param string $field_name
* The name of the field.
*
* @return string
* The first value of the item or an empty string if no value could be
* found.
*/
protected function getFirstItemField(ItemInterface $item, string $field_name) : string {
$field = $item
->getField($field_name);
// If the field doesn't exist we default to an empty string.
if (!$field) {
return '';
}
$field_values = $field
->getValues();
// If the field has no values then we convert it to an empty string.
if (empty($field_values)) {
return '';
}
return reset($field_values);
}
}
Members
Name![]() |
Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigurablePluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
ConfigurablePluginBase:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. | |
ConfigurablePluginBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
11 |
ConfigurablePluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
ConfigurablePluginBase:: |
public | function |
Returns the plugin's description. Overrides ConfigurablePluginInterface:: |
|
ConfigurablePluginBase:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. | |
ConfigurablePluginBase:: |
public | function |
Returns the label for use on the administration pages. Overrides ConfigurablePluginInterface:: |
|
ConfigurablePluginBase:: |
protected | function | Wraps the module handler. | |
ConfigurablePluginBase:: |
public | function |
Informs the plugin that some of its dependencies are being removed. Overrides ConfigurablePluginInterface:: |
5 |
ConfigurablePluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
3 |
ConfigurablePluginBase:: |
protected | function | Wraps the theme handler. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
DependencyTrait:: |
protected | property | The object's dependencies. | |
DependencyTrait:: |
protected | function | Adds multiple dependencies. | |
DependencyTrait:: |
protected | function | Adds a dependency. | |
IndexPluginBase:: |
protected | property | The index this processor is configured for. | |
IndexPluginBase:: |
public | function |
Retrieves the index this plugin is configured for. Overrides IndexPluginInterface:: |
|
IndexPluginBase:: |
public | function |
Sets the index this plugin is configured for. Overrides IndexPluginInterface:: |
|
IndexPluginBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides ConfigurablePluginBase:: |
2 |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginDependencyTrait:: |
protected | function | Calculates and adds dependencies of a specific plugin instance. Aliased as: traitCalculatePluginDependencies | 1 |
PluginDependencyTrait:: |
protected | function | Calculates and returns dependencies of a specific plugin instance. Aliased as: traitGetPluginDependencies | |
PluginDependencyTrait:: |
protected | function | Wraps the module handler. Aliased as: traitModuleHandler | 1 |
PluginDependencyTrait:: |
protected | function | Wraps the theme handler. Aliased as: traitThemeHandler | 1 |
ProcessorInterface:: |
constant | Processing stage: add properties. | ||
ProcessorInterface:: |
constant | Processing stage: alter indexed items. | ||
ProcessorInterface:: |
constant | Processing stage: postprocess query. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess index. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess query. | ||
ProcessorInterface:: |
constant | Processing stage: preprocess index. | ||
ProcessorPluginBase:: |
protected | property | The fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Alter the items to be indexed. Overrides ProcessorInterface:: |
3 |
ProcessorPluginBase:: |
public static | function |
Creates an instance of the plugin. Overrides ConfigurablePluginBase:: |
8 |
ProcessorPluginBase:: |
protected | function | Ensures that a field with certain properties is indexed on the index. | |
ProcessorPluginBase:: |
protected | function | Finds a certain field in the index. | |
ProcessorPluginBase:: |
public | function | Retrieves the fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Returns the weight for a specific processing stage. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function |
Determines whether this plugin should be hidden in the UI. Overrides HideablePluginBase:: |
|
ProcessorPluginBase:: |
public | function |
Determines whether this processor should always be enabled. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function |
Postprocess search results before they are returned by the query. Overrides ProcessorInterface:: |
2 |
ProcessorPluginBase:: |
public | function |
Preprocesses search items for indexing. Overrides ProcessorInterface:: |
5 |
ProcessorPluginBase:: |
public | function |
Determines whether re-indexing is required after a settings change. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public | function | Sets the fields helper. | 1 |
ProcessorPluginBase:: |
public | function |
Sets the weight for a specific processing stage. Overrides ProcessorInterface:: |
|
ProcessorPluginBase:: |
public static | function |
Checks whether this processor is applicable for a certain index. Overrides ProcessorInterface:: |
8 |
ProcessorPluginBase:: |
public | function |
Checks whether this processor implements a particular stage. Overrides ProcessorInterface:: |
2 |
RestrictedNameProcessor:: |
public | function |
Adds the values of properties defined by this processor to the item. Overrides ProcessorPluginBase:: |
|
RestrictedNameProcessor:: |
protected | function | Fetches the first value of a field for an item. | |
RestrictedNameProcessor:: |
public | function |
Retrieves the properties this processor defines for the given datasource. Overrides ProcessorPluginBase:: |
|
RestrictedNameProcessor:: |
public | function |
Preprocesses the search index entity before it is saved. Overrides ProcessorPluginBase:: |
|
RestrictedNameProcessor:: |
public | function |
Preprocesses a search query. Overrides ProcessorPluginBase:: |
|
RestrictedNameProcessor:: |
protected | function | Check whether the datasource is supported by this processor. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |