Skip to content

Commit a7590b5

Browse files
committed
Prefill departments cache
1 parent beb6837 commit a7590b5

1 file changed

Lines changed: 88 additions & 82 deletions

File tree

lhc_web/modules/lhchat/syncadmininterface.php

Lines changed: 88 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -169,88 +169,6 @@
169169
$timeLog['online_op'] = $ReturnMessages['online_op']['tt'];
170170
}
171171

172-
if (is_array($Params['user_parameters_unordered']['w']) && in_array($mapsWidgets['subject_chats'],$Params['user_parameters_unordered']['w']) && $currentUser->hasAccessTo('lhchat', 'subject_chats') == true) {
173-
174-
$startTimeRequestItem = microtime();
175-
176-
$limitList = is_numeric($Params['user_parameters_unordered']['limits']) ? (int)$Params['user_parameters_unordered']['limits'] : 10;
177-
178-
$filter = array('ignore_fields' => erLhcoreClassChat::$chatListIgnoreField);
179-
180-
if (is_array($Params['user_parameters_unordered']['subjectd']) && !empty($Params['user_parameters_unordered']['subjectd'])) {
181-
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectd']);
182-
$filter['filterin']['dep_id'] = $Params['user_parameters_unordered']['subjectd'];
183-
}
184-
185-
if (is_array($Params['user_parameters_unordered']['sdgroups']) && !empty($Params['user_parameters_unordered']['sdgroups'])) {
186-
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['sdgroups']);
187-
$depIds = erLhcoreClassChat::getDepartmentsByDepGroup($Params['user_parameters_unordered']['sdgroups']);
188-
if (!empty($depIds)) {
189-
$filter['filterin']['dep_id'] = isset($filter['filterin']['dep_id']) ? array_merge($filter['filterin']['dep_id'],$depIds) : $depIds;
190-
}
191-
}
192-
193-
if (is_array($Params['user_parameters_unordered']['subjectdprod']) && !empty($Params['user_parameters_unordered']['subjectdprod'])) {
194-
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectdprod']);
195-
$filter['filterin']['product_id'] = $Params['user_parameters_unordered']['subjectdprod'];
196-
}
197-
198-
if (is_array($Params['user_parameters_unordered']['subjectu']) && !empty($Params['user_parameters_unordered']['subjectu'])) {
199-
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectu']);
200-
$filter['filterin']['user_id'] = $Params['user_parameters_unordered']['subjectu'];
201-
}
202-
203-
// User groups filter
204-
if (is_array($Params['user_parameters_unordered']['sugroups']) && !empty($Params['user_parameters_unordered']['sugroups'])) {
205-
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['sugroups']);
206-
$userIds = erLhcoreClassChat::getUserIDByGroup($Params['user_parameters_unordered']['sugroups']);
207-
if (!empty($userIds)) {
208-
$filter['filterin']['user_id'] = isset($additionalFilter['filterin']['user_id']) ? array_merge($additionalFilter['filterin']['user_id'],$userIds) : $userIds;
209-
}
210-
}
211-
212-
if ((int)$Params['user_parameters_unordered']['subjectd_mslf'] === 1) {
213-
$filter['filter']['user_id'] = $currentUser->getUserID();
214-
}
215-
216-
$chats = erLhcoreClassChat::getSubjectChats($limitList, 0, $filter);
217-
218-
if (!empty($chats)) {
219-
$subjectsSelected = erLhAbstractModelSubjectChat::getList(array('filter' => array('chat_id' => array_keys($chats))));
220-
$subjectByChat = [];
221-
$subject_ids = [];
222-
foreach ($subjectsSelected as $subjectSelected) {
223-
$subject_ids[] = $subjectSelected->subject_id;
224-
}
225-
if (!empty($subject_ids)) {
226-
$subjectsMeta = erLhAbstractModelSubject::getList(array('filterin' => array('id' => array_unique($subject_ids))));
227-
}
228-
foreach ($subjectsSelected as $subjectSelected) {
229-
if (isset( $subjectsMeta[$subjectSelected->subject_id])) {
230-
$subjectByChat[$subjectSelected->chat_id][] = [
231-
'n' => $subjectsMeta[$subjectSelected->subject_id]->name,
232-
'c' => $subjectsMeta[$subjectSelected->subject_id]->color
233-
];
234-
}
235-
}
236-
}
237-
238-
erLhcoreClassChat::prefillGetAttributes($chats, array('user_status_front','hum','time_created_front','department_name','plain_user_name','product_name','n_official','pnd_rsp','n_off_full','aicons','last_msg_time_front','start_last_action_front'),array('iwh','last_op_msg_time','has_unread_messages','product_id','product','department','time','pnd_time','user_id','user','additional_data','additional_data_array','chat_variables','chat_variables_array'),array('additional_columns' => $columnsAdditional));
239-
240-
foreach ($chats as $index => $chat) {
241-
if (isset($subjectByChat[$chat->id])) {
242-
$chats[$index]->subject_list = $subjectByChat[$chat->id];
243-
}
244-
}
245-
246-
$ReturnMessages['subject_chats'] = array(
247-
'tt' => erLhcoreClassModule::getDifference($startTimeRequestItem, microtime()),
248-
'last_id_identifier' => 'subject_chats',
249-
'list' => array_values($chats));
250-
251-
$timeLog['subject_chats'] = $ReturnMessages['subject_chats']['tt'];
252-
}
253-
254172
if ($showDepartmentsStats == true && is_array($Params['user_parameters_unordered']['w']) && in_array($mapsWidgets['departments_stats'],$Params['user_parameters_unordered']['w'])) {
255173
/**
256174
* Departments stats
@@ -304,6 +222,11 @@
304222

305223
$departments = erLhcoreClassModelDepartament::getList($filter);
306224

225+
// Cache departments for reuse in later queries (e.g. chat prefill department lookups)
226+
foreach ($departments as $dep) {
227+
$GLOBALS['erLhcoreClassModelDepartament' . $dep->id] = $dep;
228+
}
229+
307230
erLhcoreClassChat::prefillGetAttributes($departments,array('id', 'name', 'pending_chats_counter', 'active_chats_counter', 'bot_chats_counter', 'inop_chats_cnt', 'acop_chats_cnt', 'inactive_chats_cnt', 'max_load','max_load_h','max_load_op','max_load_op_h'), array(), array('remove_all' => true));
308231

309232
$ReturnMessages['departments_stats'] = array(
@@ -342,6 +265,89 @@
342265

343266
}
344267

268+
if (is_array($Params['user_parameters_unordered']['w']) && in_array($mapsWidgets['subject_chats'],$Params['user_parameters_unordered']['w']) && $currentUser->hasAccessTo('lhchat', 'subject_chats') == true) {
269+
270+
$startTimeRequestItem = microtime();
271+
272+
$limitList = is_numeric($Params['user_parameters_unordered']['limits']) ? (int)$Params['user_parameters_unordered']['limits'] : 10;
273+
274+
$filter = array('ignore_fields' => erLhcoreClassChat::$chatListIgnoreField);
275+
276+
if (is_array($Params['user_parameters_unordered']['subjectd']) && !empty($Params['user_parameters_unordered']['subjectd'])) {
277+
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectd']);
278+
$filter['filterin']['dep_id'] = $Params['user_parameters_unordered']['subjectd'];
279+
}
280+
281+
if (is_array($Params['user_parameters_unordered']['sdgroups']) && !empty($Params['user_parameters_unordered']['sdgroups'])) {
282+
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['sdgroups']);
283+
$depIds = erLhcoreClassChat::getDepartmentsByDepGroup($Params['user_parameters_unordered']['sdgroups']);
284+
if (!empty($depIds)) {
285+
$filter['filterin']['dep_id'] = isset($filter['filterin']['dep_id']) ? array_merge($filter['filterin']['dep_id'],$depIds) : $depIds;
286+
}
287+
}
288+
289+
if (is_array($Params['user_parameters_unordered']['subjectdprod']) && !empty($Params['user_parameters_unordered']['subjectdprod'])) {
290+
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectdprod']);
291+
$filter['filterin']['product_id'] = $Params['user_parameters_unordered']['subjectdprod'];
292+
}
293+
294+
if (is_array($Params['user_parameters_unordered']['subjectu']) && !empty($Params['user_parameters_unordered']['subjectu'])) {
295+
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['subjectu']);
296+
$filter['filterin']['user_id'] = $Params['user_parameters_unordered']['subjectu'];
297+
}
298+
299+
// User groups filter
300+
if (is_array($Params['user_parameters_unordered']['sugroups']) && !empty($Params['user_parameters_unordered']['sugroups'])) {
301+
erLhcoreClassChat::validateFilterIn($Params['user_parameters_unordered']['sugroups']);
302+
$userIds = erLhcoreClassChat::getUserIDByGroup($Params['user_parameters_unordered']['sugroups']);
303+
if (!empty($userIds)) {
304+
$filter['filterin']['user_id'] = isset($additionalFilter['filterin']['user_id']) ? array_merge($additionalFilter['filterin']['user_id'],$userIds) : $userIds;
305+
}
306+
}
307+
308+
if ((int)$Params['user_parameters_unordered']['subjectd_mslf'] === 1) {
309+
$filter['filter']['user_id'] = $currentUser->getUserID();
310+
}
311+
312+
$chats = erLhcoreClassChat::getSubjectChats($limitList, 0, $filter);
313+
314+
if (!empty($chats)) {
315+
$subjectsSelected = erLhAbstractModelSubjectChat::getList(array('filter' => array('chat_id' => array_keys($chats))));
316+
$subjectByChat = [];
317+
$subject_ids = [];
318+
foreach ($subjectsSelected as $subjectSelected) {
319+
$subject_ids[] = $subjectSelected->subject_id;
320+
}
321+
if (!empty($subject_ids)) {
322+
$subjectsMeta = erLhAbstractModelSubject::getList(array('filterin' => array('id' => array_unique($subject_ids))));
323+
}
324+
foreach ($subjectsSelected as $subjectSelected) {
325+
if (isset( $subjectsMeta[$subjectSelected->subject_id])) {
326+
$subjectByChat[$subjectSelected->chat_id][] = [
327+
'n' => $subjectsMeta[$subjectSelected->subject_id]->name,
328+
'c' => $subjectsMeta[$subjectSelected->subject_id]->color
329+
];
330+
}
331+
}
332+
}
333+
334+
erLhcoreClassChat::prefillGetAttributes($chats, array('user_status_front','hum','time_created_front','department_name','plain_user_name','product_name','n_official','pnd_rsp','n_off_full','aicons','last_msg_time_front','start_last_action_front'),array('iwh','last_op_msg_time','has_unread_messages','product_id','product','department','time','pnd_time','user_id','user','additional_data','additional_data_array','chat_variables','chat_variables_array'),array('additional_columns' => $columnsAdditional));
335+
336+
foreach ($chats as $index => $chat) {
337+
if (isset($subjectByChat[$chat->id])) {
338+
$chats[$index]->subject_list = $subjectByChat[$chat->id];
339+
}
340+
}
341+
342+
$ReturnMessages['subject_chats'] = array(
343+
'tt' => erLhcoreClassModule::getDifference($startTimeRequestItem, microtime()),
344+
'last_id_identifier' => 'subject_chats',
345+
'list' => array_values($chats));
346+
347+
$timeLog['subject_chats'] = $ReturnMessages['subject_chats']['tt'];
348+
}
349+
350+
345351
$chatsForced = array();
346352

347353
if ($activeTabEnabled == true) {

0 commit comments

Comments
 (0)