-
Notifications
You must be signed in to change notification settings - Fork 4
/
private_message_messenger.module
executable file
·173 lines (158 loc) · 4.88 KB
/
private_message_messenger.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
/**
* @file
* The private_message_messenger.module file.
*/
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Url;
/**
* Implements hook_theme().
*/
function private_message_messenger_theme($existing, $type, $theme, $path) {
return [
'pmm_thread' => [
'variables' => [
'fallback_picture' => NULL,
'base_path' => '/',
'thread_actions' => TRUE,
'welcome_text' => NULL,
'strings' => [
'inbox' => NULL,
'message_placeholder' => NULL,
'username_placeholder' => NULL,
'send' => NULL,
'delete' => NULL,
],
],
],
'pmm_threads' => [
'variables' => [
'strings' => [
'new_message' => NULL,
'loading' => NULL,
],
],
],
'pmm_thread_teaser' => [
'variables' => [
'fallback_picture' => NULL,
'id_suffix' => NULL,
],
],
'pmm_recent' => [
'variables' => [
'strings' => [
'link' => NULL,
'more' => NULL,
'loading' => NULL,
],
],
],
];
}
/**
* Implements hook_preprocess_pmm_threads().
*/
function template_preprocess_pmm_threads(&$variables) {
$variables['#attached']['library'][] = 'private_message_messenger/threads';
$variables['strings'] = [
'new_message' => t('New Message'),
'loading' => t('Loading...'),
];
}
/**
* Implements hook_preprocess_pmm_thread().
*/
function template_preprocess_pmm_thread(&$variables) {
$variables['#attached']['library'][] = 'private_message_messenger/thread';
$variables['fallback_picture'] = _private_message_messenger_fallback_picture();
$variables['base_path'] = base_path();
$variables['strings'] = [
'inbox' => t('‹ Inbox'),
'message_placeholder' => t('Type a message'),
'username_placeholder' => t('Type a username'),
'send' => t('Send'),
'delete' => t('Delete thread'),
];
}
/**
* Implements hook_preprocess_pmm_thread().
*/
function template_preprocess_pmm_thread_teaser(&$variables) {
$variables['fallback_picture'] = _private_message_messenger_fallback_picture();
}
/**
* Implements hook_preprocess_pmm_recent().
*/
function template_preprocess_pmm_recent(&$variables) {
$helper = \Drupal::service('private_message_messenger.messenger');
$variables['#attached']['library'][] = 'private_message_messenger/recent';
$variables['url'] = $helper->getMessengerPath();
$variables['strings'] = [
'link' => t('Messages'),
'more' => t('All Messages'),
'loading' => t('Loading...'),
];
}
/**
* Get the fallback image.
*
* @return string
* Path to the default image.
*/
function _private_message_messenger_fallback_picture() {
$img = base_path() . drupal_get_path('module', 'private_message_messenger') . '/images/default-profile.jpg';
\Drupal::moduleHandler()->alter('private_message_messenger_fallback_picture', $img);
return $img;
}
/**
* A wrapper to return messenger settings.
*
* @return array
* Array of settings for drupalSettings.
*/
function _private_message_messenger_get_settings() {
$helper = \Drupal::service('private_message_messenger.messenger');
return $helper->getSettings();
}
/**
* Implements hook_entity_extra_field_info().
*/
function private_message_messenger_entity_extra_field_info() {
$fields = [];
$user_bundles = \Drupal::entityManager()->getBundleInfo('user');
foreach (array_keys($user_bundles) as $bundle) {
$fields['user'][$bundle]['display']['private_message_messenger_link'] = [
'label' => t('Private message messenger thread link'),
'description' => t('Displays a link to send a private message to the user via Messenger'),
'visible' => FALSE,
];
}
return $fields;
}
/**
* Implements hook_user_view().
*/
function private_message_messenger_user_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
if ($display->getComponent('private_message_messenger_link')) {
$current_user = \Drupal::currentUser();
if ($current_user->hasPermission('use private messaging system') && $current_user->id() != $entity->id()) {
$path = 'new-' . $entity->id();
$build['private_message_messenger_link'] = [
'#type' => 'link',
'#url' => Url::fromRoute('private_message_messenger.messenger', [], ['fragment' => $path]),
'#title' => t('Send private message'),
'#attributes' => ['class' => ['private_message_link']],
'#prefix' => '<div class="pmm_link_wrapper">',
'#suffix' => '</div>',
];
}
}
}
function private_message_messenger_library_info_alter(&$libraries, $extension) {
$use_timeago_cdn = \Drupal::config('private_message_messenger.settings')->get('timeago_cdn');
if ($use_timeago_cdn && $extension == 'private_message_messenger') {
$libraries['init']['dependencies'][] = 'private_message_messenger/timeago_cdn';
}
}