|
169 | 169 | $timeLog['online_op'] = $ReturnMessages['online_op']['tt']; |
170 | 170 | } |
171 | 171 |
|
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 | | - |
254 | 172 | if ($showDepartmentsStats == true && is_array($Params['user_parameters_unordered']['w']) && in_array($mapsWidgets['departments_stats'],$Params['user_parameters_unordered']['w'])) { |
255 | 173 | /** |
256 | 174 | * Departments stats |
|
304 | 222 |
|
305 | 223 | $departments = erLhcoreClassModelDepartament::getList($filter); |
306 | 224 |
|
| 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 | + |
307 | 230 | 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)); |
308 | 231 |
|
309 | 232 | $ReturnMessages['departments_stats'] = array( |
|
342 | 265 |
|
343 | 266 | } |
344 | 267 |
|
| 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 | + |
345 | 351 | $chatsForced = array(); |
346 | 352 |
|
347 | 353 | if ($activeTabEnabled == true) { |
|
0 commit comments