mentions.module in Open Social 8
Same filename and directory in other branches
- 8.9 modules/custom/mentions/mentions.module
- 8.2 modules/custom/mentions/mentions.module
- 8.3 modules/custom/mentions/mentions.module
- 8.4 modules/custom/mentions/mentions.module
- 8.5 modules/custom/mentions/mentions.module
- 8.6 modules/custom/mentions/mentions.module
- 8.7 modules/custom/mentions/mentions.module
- 8.8 modules/custom/mentions/mentions.module
- 10.3.x modules/custom/mentions/mentions.module
- 10.0.x modules/custom/mentions/mentions.module
- 10.1.x modules/custom/mentions/mentions.module
- 10.2.x modules/custom/mentions/mentions.module
Code for the mentions module.
File
modules/custom/mentions/mentions.moduleView source
<?php
/**
* @file
* Code for the mentions module.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Symfony\Component\EventDispatcher\Event;
use Drupal\mentions\Plugin\Filter\MentionsFilter;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Link;
/**
* Implements hook_help().
*/
function mentions_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'entity.mentions_type.list':
$text_format_url = Url::fromRoute('filter.admin_overview');
$text_format_link = Link::fromTextAndUrl(t('text formats'), $text_format_url)
->toString();
$output = t("You can enable 'Mentions Filter' for the mentions type below for the appropriate @text_format", [
'@text_format' => $text_format_link,
]);
return $output;
}
}
/**
* Implements hook_theme().
*/
function mentions_theme() {
$items = [
'mention_link' => [
'variables' => [
'mention_id' => NULL,
'link' => NULL,
'render_link' => FALSE,
'render_value' => '',
],
],
];
return $items;
}
/**
* Implements hook_entity_insert().
*/
function mentions_entity_insert(EntityInterface $entity) {
if (PHP_SAPI !== 'cli') {
mentions_insert_or_update($entity, FALSE);
}
}
/**
* Implements hook_entity_update().
*/
function mentions_entity_update(EntityInterface $entity) {
if (PHP_SAPI !== 'cli') {
mentions_insert_or_update($entity, TRUE);
}
}
/**
* Handling mentions crud operations.
*/
function mentions_insert_or_update(EntityInterface $entity, $update) {
$config = \Drupal::config('mentions.settings');
$supported_entities = $config
->get('supported_entity_types');
if (empty($supported_entities) || !in_array($entity
->getEntityTypeId(), $supported_entities)) {
return;
}
$type = $entity
->getEntityTypeId();
$field_definitions = $entity
->getFieldDefinitions();
$fields_with_text = [];
$supported_field_types = [
'text_with_summary',
'text_long',
'text',
];
foreach ($field_definitions as $field_definition) {
$field_type = $field_definition
->getType();
if (isset($field_type) && in_array($field_type, $supported_field_types)) {
array_push($fields_with_text, $field_definition
->getName());
}
}
foreach ($fields_with_text as $text_field) {
$entity_text_field = $entity
->get($text_field);
$value = $entity_text_field->value;
$format = !empty($entity_text_field->format) ? $entity_text_field->format : 'basic_html';
$container = \Drupal::getContainer();
$filter_mentions = MentionsFilter::create($container, [], 'filter_mentions', []);
$filter_mentions
->setTextFormat($format);
if ($filter_mentions
->shouldApplyFilter()) {
$mentions = $filter_mentions
->getMentions($value);
$auid = \Drupal::currentUser()
->id();
mentions_crud_update($type, $mentions, $entity
->id(), $auid);
}
}
}
/**
* Implements hook_entity_delete().
*/
function mentions_entity_delete(EntityInterface $entity) {
$mention_ids = \Drupal::entityQuery('mentions')
->condition('entity_id', $entity
->id())
->condition('entity_type', $entity
->getEntityTypeId())
->execute();
$storage_handler = \Drupal::entityTypeManager()
->getStorage('mentions');
$entities = $storage_handler
->loadMultiple($mention_ids);
$storage_handler
->delete($entities);
$event_dispatcher = \Drupal::service('event_dispatcher');
$event_dispatcher
->dispatch('mentions.delete', new Event());
}
/**
* Insert mentions into DB.
*/
function mentions_crud_update($type, $mentions, $id, $author) {
$mentions_storage = \Drupal::entityTypeManager()
->getStorage('mentions');
// Build old array of mentions.
$old_users = [];
$old_mids = [];
$mention_ids = \Drupal::entityQuery('mentions')
->condition('entity_type', $type)
->condition('entity_id', $id)
->execute();
foreach ($mention_ids as $mention) {
$entity = $mentions_storage
->load($mention);
$old_user = $entity
->get('uid')
->getValue()[0]['value'];
$old_users[] = $old_user;
$old_mids[$old_user] = $mention;
}
// Build array of new mentions.
$new_users = [];
foreach ($mentions as $mention) {
if ($mention['target']['entity_type'] == 'profile') {
$storage = \Drupal::entityTypeManager()
->getStorage($mention['target']['entity_type']);
$profile = $storage
->load($mention['target']['entity_id']);
$new_users[] = $profile
->getOwnerId();
}
else {
$new_users[] = $mention['target']['entity_id'];
}
}
$event_dispatcher = \Drupal::service('event_dispatcher');
// Add new mentions.
foreach (array_diff($new_users, $old_users) as $uid) {
$mention_attributes = [
'entity_type' => $type,
'entity_id' => $id,
'uid' => $uid,
'auid' => $author,
];
$mention = $mentions_storage
->create($mention_attributes);
$mention
->save();
$event_dispatcher
->dispatch('mentions.insert', new Event());
}
// Update existing mentions.
foreach (array_intersect($new_users, $old_users) as $uid) {
$entity = $mentions_storage
->load($old_mids[$uid]);
$entity
->set('created', \Drupal::time()
->getRequestTime());
$entity
->save();
$event_dispatcher
->dispatch('mentions.update', new Event());
}
// Delete old mentions.
foreach (array_diff($old_users, $new_users) as $uid) {
$entity = $mentions_storage
->load($old_mids[$uid]);
$entity
->delete();
$event_dispatcher
->dispatch('mentions.delete', new Event());
}
}
Functions
Name | Description |
---|---|
mentions_crud_update | Insert mentions into DB. |
mentions_entity_delete | Implements hook_entity_delete(). |
mentions_entity_insert | Implements hook_entity_insert(). |
mentions_entity_update | Implements hook_entity_update(). |
mentions_help | Implements hook_help(). |
mentions_insert_or_update | Handling mentions crud operations. |
mentions_theme | Implements hook_theme(). |